卡片布局操作按钮
Card Layout Action Button
我创建了一个包含四张卡片的卡片布局。
我的卡片样本可以在图片中找到。
动态创建它们的代码如下:
public class four_future extends Fragment {
// TODO: Rename parameter arguments, choose names that match
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
private static final String ARG_PARAM1 = "param1";
private static final String ARG_PARAM2 = "param2";
// TODO: Rename and change types of parameters
public four_future() {
// Required empty public constructor
}
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
RecyclerView recyclerView = (RecyclerView) inflater.inflate(
R.layout.recycler_view, container, false);
ContentAdapter adapter = new ContentAdapter(recyclerView.getContext());
recyclerView.setAdapter(adapter);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
return recyclerView;
}
public static class ViewHolder extends RecyclerView.ViewHolder {
public ImageView picture;
public TextView name;
public TextView description;
public ViewHolder(LayoutInflater inflater, ViewGroup parent) {
super(inflater.inflate(R.layout.four_future, parent, false));
picture = (ImageView) itemView.findViewById(R.id.card_image);
name = (TextView) itemView.findViewById(R.id.card_title);
description = (TextView) itemView.findViewById(R.id.card_text);
// Adding Snackbar to Action Button inside card
Button button = (Button)itemView.findViewById(R.id.action_button);
button.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
Snackbar.make(v, "Action is pressed",
Snackbar.LENGTH_LONG).show();
}
});
}
}
/**
* Adapter to display recycler view.
*/
public static class ContentAdapter extends RecyclerView.Adapter<ViewHolder> {
// Set numbers of List in RecyclerView.
private static final int LENGTH = 3
;
private final String[] mPrograms;
private final Drawable[] mProgramPictures;
public ContentAdapter(Context context) {
Resources resources = context.getResources();
mPrograms = resources.getStringArray(R.array.programs);
TypedArray a = resources.obtainTypedArray(R.array.program_picture);
mProgramPictures = new Drawable[a.length()];
for (int i = 0; i < mProgramPictures.length; i++) {
mProgramPictures[i] = a.getDrawable(i);
}
a.recycle();
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new ViewHolder(LayoutInflater.from(parent.getContext()), parent);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.picture.setImageDrawable(mProgramPictures[position % mProgramPictures.length]);
holder.name.setText(mPrograms[position % mPrograms.length]);
}
@Override
public int getItemCount() {
return LENGTH;
}
}
}
我在每张卡片上都有操作按钮。如何通过单击不同卡片上的操作按钮打开不同的活动。截至目前,每个操作按钮都只提供一个小吃店。如果我单击第一张卡片上的操作按钮,它必须打开 first_activity.xml。我怎样才能做到这一点?
在您的 onBindViewHolder
实现中,存储有关 Activity 在 Button
中打开的信息(您可以做一些简单的事情,例如使用适当的 [=26] 设置按钮的标签=] 标签,或存储一个 Intent)。然后在你做的ViewHolder中
Button button = (Button)itemView.findViewById(R.id.action_button);
您可以检索标签并使用它打开正确的 activity。
编辑:试试这个:
更改您的 ViewHolder:
public static class ViewHolder extends RecyclerView.ViewHolder {
public ImageView picture;
public TextView name;
public TextView description;
public Button button;
public ViewHolder(LayoutInflater inflater, ViewGroup parent) {
super(inflater.inflate(R.layout.four_future, parent, false));
picture = (ImageView) itemView.findViewById(R.id.card_image);
name = (TextView) itemView.findViewById(R.id.card_title);
description = (TextView) itemView.findViewById(R.id.card_text);
// Adding Snackbar to Action Button inside card
button = (Button)itemView.findViewById(R.id.action_button);
button.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
if("activity1".equals(button.getTag()){
startActivity1();
}else if("activity2".equals(button.getTag()){
startActivity2();
}else{
Snackbar.make(v, "Action is pressed",
Snackbar.LENGTH_LONG).show();
}
}
});
}
}
然后修改onBindViewHolder
调用来设置标签:
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.picture.setImageDrawable(mProgramPictures[position % mProgramPictures.length]);
holder.name.setText(mPrograms[position % mPrograms.length]);
if(position == 0) holder.button.setTag("activity1");
else if(position == 1) holder.button.setTag("activity2");
}
我创建了一个包含四张卡片的卡片布局。
我的卡片样本可以在图片中找到。
public class four_future extends Fragment {
// TODO: Rename parameter arguments, choose names that match
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
private static final String ARG_PARAM1 = "param1";
private static final String ARG_PARAM2 = "param2";
// TODO: Rename and change types of parameters
public four_future() {
// Required empty public constructor
}
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
RecyclerView recyclerView = (RecyclerView) inflater.inflate(
R.layout.recycler_view, container, false);
ContentAdapter adapter = new ContentAdapter(recyclerView.getContext());
recyclerView.setAdapter(adapter);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
return recyclerView;
}
public static class ViewHolder extends RecyclerView.ViewHolder {
public ImageView picture;
public TextView name;
public TextView description;
public ViewHolder(LayoutInflater inflater, ViewGroup parent) {
super(inflater.inflate(R.layout.four_future, parent, false));
picture = (ImageView) itemView.findViewById(R.id.card_image);
name = (TextView) itemView.findViewById(R.id.card_title);
description = (TextView) itemView.findViewById(R.id.card_text);
// Adding Snackbar to Action Button inside card
Button button = (Button)itemView.findViewById(R.id.action_button);
button.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
Snackbar.make(v, "Action is pressed",
Snackbar.LENGTH_LONG).show();
}
});
}
}
/**
* Adapter to display recycler view.
*/
public static class ContentAdapter extends RecyclerView.Adapter<ViewHolder> {
// Set numbers of List in RecyclerView.
private static final int LENGTH = 3
;
private final String[] mPrograms;
private final Drawable[] mProgramPictures;
public ContentAdapter(Context context) {
Resources resources = context.getResources();
mPrograms = resources.getStringArray(R.array.programs);
TypedArray a = resources.obtainTypedArray(R.array.program_picture);
mProgramPictures = new Drawable[a.length()];
for (int i = 0; i < mProgramPictures.length; i++) {
mProgramPictures[i] = a.getDrawable(i);
}
a.recycle();
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new ViewHolder(LayoutInflater.from(parent.getContext()), parent);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.picture.setImageDrawable(mProgramPictures[position % mProgramPictures.length]);
holder.name.setText(mPrograms[position % mPrograms.length]);
}
@Override
public int getItemCount() {
return LENGTH;
}
}
}
我在每张卡片上都有操作按钮。如何通过单击不同卡片上的操作按钮打开不同的活动。截至目前,每个操作按钮都只提供一个小吃店。如果我单击第一张卡片上的操作按钮,它必须打开 first_activity.xml。我怎样才能做到这一点?
在您的 onBindViewHolder
实现中,存储有关 Activity 在 Button
中打开的信息(您可以做一些简单的事情,例如使用适当的 [=26] 设置按钮的标签=] 标签,或存储一个 Intent)。然后在你做的ViewHolder中
Button button = (Button)itemView.findViewById(R.id.action_button);
您可以检索标签并使用它打开正确的 activity。
编辑:试试这个:
更改您的 ViewHolder:
public static class ViewHolder extends RecyclerView.ViewHolder {
public ImageView picture;
public TextView name;
public TextView description;
public Button button;
public ViewHolder(LayoutInflater inflater, ViewGroup parent) {
super(inflater.inflate(R.layout.four_future, parent, false));
picture = (ImageView) itemView.findViewById(R.id.card_image);
name = (TextView) itemView.findViewById(R.id.card_title);
description = (TextView) itemView.findViewById(R.id.card_text);
// Adding Snackbar to Action Button inside card
button = (Button)itemView.findViewById(R.id.action_button);
button.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
if("activity1".equals(button.getTag()){
startActivity1();
}else if("activity2".equals(button.getTag()){
startActivity2();
}else{
Snackbar.make(v, "Action is pressed",
Snackbar.LENGTH_LONG).show();
}
}
});
}
}
然后修改onBindViewHolder
调用来设置标签:
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.picture.setImageDrawable(mProgramPictures[position % mProgramPictures.length]);
holder.name.setText(mPrograms[position % mPrograms.length]);
if(position == 0) holder.button.setTag("activity1");
else if(position == 1) holder.button.setTag("activity2");
}