RecycleView onClickListener - 在哪里补充? [英] RecycleView onClickListener - Where to add?

查看:204
本文介绍了RecycleView onClickListener - 在哪里补充?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直努力遵循以下指导来实现对RecyclerView的onClickListener

I've been trying to follow the following guide to implement an onClickListener on a RecyclerView

http://blog.lovelyhq.com /创建-名单与 - recyclerview功能于Android的部分-2 /

不过,我似乎无法得到任何上下文来调用setOnClickListener或为getPosition。

However, I can't seem to get any context to call setOnClickListener or getPosition.

下面是我的code(误差旁边有注释):

Here is my code (errors have comments next to them):

public class CategoryDataAdapter extends RecyclerView.Adapter<CategoryDataAdapter.DataViewHolder> implements View.OnClickListener
{
    private List<CategoryData.Category> dataList;
    private static Context con;

    private ClickListener clickListener;

    public CategoryDataAdapter(Context context, List<CategoryData.Category> list)
    {
        this.dataList = list;
        con = context;
    }

    @Override
    public int getItemCount()
    {
        return dataList.size();
    }

    @Override
    public void onBindViewHolder(DataViewHolder dataViewHolder, int i)
    {
        CategoryData.Category item = dataList.get(i);

        Picasso.with(con).load(item.getImage()).into(dataViewHolder.categoryImage);
        dataViewHolder.categoryText.setText(item.getName());
    }

    @Override
    public DataViewHolder onCreateViewHolder(ViewGroup viewGroup, int i)
    {
        View itemView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.tile_category, viewGroup, false);
        DataViewHolder dvh = new DataViewHolder(itemView);

        return dvh;
    }

    public static class DataViewHolder extends RecyclerView.ViewHolder
    {
        protected ImageView categoryImage;
        protected TextView categoryText;


        public DataViewHolder(View v)
        {
            super(v);

            categoryImage = (ImageView) v.findViewById(R.id.categoryImage);
            categoryText = (TextView) v.findViewById(R.id.categoryName);

            v.setOnClickListener(this); // here, can't put in 'this'
        }
    }

    public interface ClickListener
    {
        /**
         * Called when the view is clicked.
         *
         * @param v view that is clicked
         * @param position of the clicked item
         * @param isLongClick true if long click, false otherwise
         */

        public void onClick(View v, int position, boolean isLongClick);
    }

    public void setClickListener(ClickListener clickListener)
    {
        this.clickListener = clickListener;
    }

    @Override
    public void onClick(View v)
    {
        clickListener.onClick(v, getPosition(), false); // here, get position
    }
}

我能做些什么来解决这个问题?我只需要为整个视图点击监听器,而不是一个特定的项目(已经实施了)

What can I do to fix this? I only need a click listener for the entire view, not one particular item (already implemented that)

推荐答案

而不是让 RecyclerView.Adapter 实施 View.OnClickListener ,使 DataViewHolder 实施。随后还保存rootview你DataViewHolder变量(如ImageView的和的TextView),并在 onBindViewHolder 使用类似如下:

Instead of making RecyclerView.Adapter implement View.OnClickListener, make DataViewHolder implement that. then also save the rootview at your DataViewHolder variable (like ImageView and TextView) and at onBindViewHolder use something like below:

dataViewHolder.rootView.setOnClickListener(dataViewHolder);

这篇关于RecycleView onClickListener - 在哪里补充?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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