RecyclerView适配器中的onClickListener? [英] onClickListener in RecyclerView adapter?

查看:158
本文介绍了RecyclerView适配器中的onClickListener?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆