RecyclerView适配器中的onClickListener? [英] onClickListener in RecyclerView adapter?
问题描述
我想在RecyclerView适配器中设置一个onClickListener,以便我可以轻松地引用其他视图来检索其标签.
I want to set up an onClickListener within my RecyclerView adapter so I can easily refer to the other views to retrieve their tags.
是否可以在RecyclerView适配器中设置onClickListener?我该怎么办?它会影响性能吗?
Is it possible to set up an onClickListener in a RecyclerView adapter? How would I do it? Would it affect performance?
这是我的RecyclerView适配器:
Here is my RecyclerView adapter:
public class PostRecyclerAdapter extends RecyclerView.Adapter<PostRecyclerAdapter.ViewHolder> {
private Context context;
private List<Post> mDataset;
public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnCreateContextMenuListener {
public LinearLayout mainLayout;
public TextView username;
public ImageView image;
public ViewHolder(LinearLayout view) {
super(view);
view.setOnCreateContextMenuListener(this);
mainLayout = (LinearLayout) view.findViewById(R.id.main_view);
username = (TextView) view.findViewById(R.id.username);
image = (ImageView) view.findViewById(R.id.image);
}
}
public PostRecyclerAdapter(Context context, List<Post> myDataset) {
this.context = context;
this.mDataset = myDataset;
}
@Override
public PostRecyclerAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.post_layout, parent, false);
ViewHolder vh = new ViewHolder((LinearLayout) view);
return vh;
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
Post postItem = mDataset.get(position);
holder.username.setText(postItem.getUserame());
}
@Override
public int getItemCount() {
return mDataset.size();
}
}
推荐答案
我想提出一种比上面给出的方法简单得多的方法. 在您的适配器中,您应该为此编写了静态视图持有人类,然后添加以下代码
I would like to suggest a much simpler approach than the one given above. in your adapter you would have written static view holder class right for that add the following code
public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
// your views declared here
CardView cardView;
public ViewHolder(View itemView) {
super(itemView);
// your view initialised here
cardView=itemView.findViewById(R.id.card_view);
cardView.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.card_view:
// your logic
break;
}
}
}
这样,您可以处理布局的单个点击以及整个布局的点击
by doing so you can handle individual click of your layout as well as the entire layout click
这篇关于RecyclerView适配器中的onClickListener?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!