如何使用 recyclerview 管理 cardview 中的多次点击
how do I manage multiple clicks in cardview with recyclerview
我在 Android 中使用带有 recyclerview 的 cardview。
在一张卡片视图中我正在实现多个按钮....
所以,
如何为每个按钮实现不同的点击事件
例如:
I am not able to use Intent to call one more activity for different
click options
If I click Image it have to goto one activity
If I click description it have to goto another activity
MainActivity
public class MainActivity extends ActionBarActivity {
RecyclerView mRecyclerView;
RecyclerView.LayoutManager mLayoutManager;
RecyclerView.Adapter mAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view);
mRecyclerView.setHasFixedSize(true);
mLayoutManager = new LinearLayoutManager(this);
mRecyclerView.setLayoutManager(mLayoutManager);
mAdapter = new CardAdapter();
mRecyclerView.setAdapter(mAdapter);
}
}
卡适配器
public class CardAdapter extends RecyclerView.Adapter<CardAdapter.ViewHolder> {
List<Items> mItems;
public CardAdapter() {
super();
mItems = new ArrayList<Items>();
Items nature = new Items();
nature.setName("The Great Barrier Reef");
nature.setDes("Lorem ipsum dolor sit amet");
nature.setThumbnail(R.drawable.great_barrier_reef);
mItems.add(nature);
nature = new Items();
nature.setName("Grand Canyon");
nature.setDes("Lorem ipsum dolor sit amet");
nature.setThumbnail(R.drawable.grand_canyon);
mItems.add(nature);
nature = new Items();
nature.setName("Baltoro Glacier");
nature.setDes("Lorem ipsum dolor sit amet");
nature.setThumbnail(R.drawable.baltoro_glacier);
mItems.add(nature);
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View v = LayoutInflater.from(viewGroup.getContext())
.inflate(R.layout.recycler_view_card_item, viewGroup, false);
ViewHolder viewHolder = new ViewHolder(v);
return viewHolder;
}
@Override
public void onBindViewHolder(ViewHolder viewHolder, int i) {
Items nature = mItems.get(i);
viewHolder.tvNature.setText(nature.getName());
viewHolder.tvDesNature.setText(nature.getDes());
viewHolder.imgThumbnail.setImageResource(nature.getThumbnail());
}
@Override
public int getItemCount() {
return mItems.size();
}
class ViewHolder extends RecyclerView.ViewHolder{
public ImageView imgThumbnail;
public TextView tvNature;
public ViewHolder(View itemView) {
super(itemView);
imgThumbnail = (ImageView)itemView.findViewById(R.id.img_thumbnail);
tvNature = (TextView)itemView.findViewById(R.id.tv_nature);
}
}
}
项目
public class Items {
private String mName;
private String mDes;
private int mThumbnail;
public String getName() {
return mName;
}
public void setName(String name) {
this.mName = name;
}
public String getDes() {
return mDes;
}
public void setDes(String des) {
this.mDes = des;
}
public int getThumbnail() {
return mThumbnail;
}
public void setThumbnail(int thumbnail) {
this.mThumbnail = thumbnail;
}
}
您需要定义自定义点击侦听器,它能够确定点击了哪个视图(或几个不同的视图,每个视图对应不同的视图),转发 class 将其实现到适配器(例如包含 fragment/activity) 然后在 onBindViewHolder
方法中将此引用设置为 onClickListener
在您需要的视图上。
您必须将 Context
传递给适配器 class。然后你可以使用它调用 startActivity()
。
1.Change 你的 Adapter
构造器像这样
private Context context
public CardAdapter(Context context) {
this.context = context;
....//your remaining code
}
2.change 你的 onBindViewHolder
像这样
@Override
public void onBindViewHolder(ViewHolder viewHolder, int i) {
Items nature = mItems.get(i);
viewHolder.tvNature.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(context,TargetActivity.class)
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);)
context.startActivity(intent);
}
});
...//remaining code
}
3.And 现在 onCreate()
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
....
mAdapter = new CardAdapter(this); //change this line
mRecyclerView.setAdapter(mAdapter);
}
我在 Android 中使用带有 recyclerview 的 cardview。
在一张卡片视图中我正在实现多个按钮....
所以, 如何为每个按钮实现不同的点击事件
例如:
I am not able to use Intent to call one more activity for different click options
If I click Image it have to goto one activity
If I click description it have to goto another activity
MainActivity
public class MainActivity extends ActionBarActivity {
RecyclerView mRecyclerView;
RecyclerView.LayoutManager mLayoutManager;
RecyclerView.Adapter mAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view);
mRecyclerView.setHasFixedSize(true);
mLayoutManager = new LinearLayoutManager(this);
mRecyclerView.setLayoutManager(mLayoutManager);
mAdapter = new CardAdapter();
mRecyclerView.setAdapter(mAdapter);
}
}
卡适配器
public class CardAdapter extends RecyclerView.Adapter<CardAdapter.ViewHolder> {
List<Items> mItems;
public CardAdapter() {
super();
mItems = new ArrayList<Items>();
Items nature = new Items();
nature.setName("The Great Barrier Reef");
nature.setDes("Lorem ipsum dolor sit amet");
nature.setThumbnail(R.drawable.great_barrier_reef);
mItems.add(nature);
nature = new Items();
nature.setName("Grand Canyon");
nature.setDes("Lorem ipsum dolor sit amet");
nature.setThumbnail(R.drawable.grand_canyon);
mItems.add(nature);
nature = new Items();
nature.setName("Baltoro Glacier");
nature.setDes("Lorem ipsum dolor sit amet");
nature.setThumbnail(R.drawable.baltoro_glacier);
mItems.add(nature);
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View v = LayoutInflater.from(viewGroup.getContext())
.inflate(R.layout.recycler_view_card_item, viewGroup, false);
ViewHolder viewHolder = new ViewHolder(v);
return viewHolder;
}
@Override
public void onBindViewHolder(ViewHolder viewHolder, int i) {
Items nature = mItems.get(i);
viewHolder.tvNature.setText(nature.getName());
viewHolder.tvDesNature.setText(nature.getDes());
viewHolder.imgThumbnail.setImageResource(nature.getThumbnail());
}
@Override
public int getItemCount() {
return mItems.size();
}
class ViewHolder extends RecyclerView.ViewHolder{
public ImageView imgThumbnail;
public TextView tvNature;
public ViewHolder(View itemView) {
super(itemView);
imgThumbnail = (ImageView)itemView.findViewById(R.id.img_thumbnail);
tvNature = (TextView)itemView.findViewById(R.id.tv_nature);
}
}
}
项目
public class Items {
private String mName;
private String mDes;
private int mThumbnail;
public String getName() {
return mName;
}
public void setName(String name) {
this.mName = name;
}
public String getDes() {
return mDes;
}
public void setDes(String des) {
this.mDes = des;
}
public int getThumbnail() {
return mThumbnail;
}
public void setThumbnail(int thumbnail) {
this.mThumbnail = thumbnail;
}
}
您需要定义自定义点击侦听器,它能够确定点击了哪个视图(或几个不同的视图,每个视图对应不同的视图),转发 class 将其实现到适配器(例如包含 fragment/activity) 然后在 onBindViewHolder
方法中将此引用设置为 onClickListener
在您需要的视图上。
您必须将 Context
传递给适配器 class。然后你可以使用它调用 startActivity()
。
1.Change 你的 Adapter
构造器像这样
private Context context
public CardAdapter(Context context) {
this.context = context;
....//your remaining code
}
2.change 你的 onBindViewHolder
像这样
@Override
public void onBindViewHolder(ViewHolder viewHolder, int i) {
Items nature = mItems.get(i);
viewHolder.tvNature.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(context,TargetActivity.class)
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);)
context.startActivity(intent);
}
});
...//remaining code
}
3.And 现在 onCreate()
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
....
mAdapter = new CardAdapter(this); //change this line
mRecyclerView.setAdapter(mAdapter);
}