RecyclerView onClickListener - 在哪里添加?

RecycleView onClickListener - Where to add?

我一直在尝试按照以下指南在 RecyclerView 上实现 onClickListener

http://blog.lovelyhq.com/creating-lists-with-recyclerview-in-android-part-2/

但是,我似乎无法获得任何调用 setOnClickListener 或 getPosition 的上下文。

这是我的代码(错误旁边有注释):

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
    }
}

我该怎么做才能解决这个问题?我只需要一个用于整个视图的点击监听器,而不是一个特定的项目(已经实现)

不是让 RecyclerView.Adapter 实施 View.OnClickListener,而是让 DataViewHolder 实施它。然后也将 rootview 保存在您的 DataViewHolder 变量(如 ImageView 和 TextView),并在 onBindViewHolder 使用如下内容:

dataViewHolder.rootView.setOnClickListener(dataViewHolder);

在recyclerAdapter中添加检测点击监听器的接口

public class DeviceAdapter extends ArrayAdapter<Blablah>{
private OnClickItemListener listener;

@Override
public View getView(final int position, View convertView, ViewGroup parent) {

    ................

    holder.button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(listener != null){
                listener.click(int position)
            }
        }
    });

    .............

    return convertView;
}

public interface OnClickItemListener {
    public void click(int position);
}

public void setOnClickItemListener(OnClickItemListener listener) {
    this.listener = listener;
}

}

并将适配器侦听器设置为您的 fragment/activity

adapterRecycler.setOnsetOnClickItemListener(new ....{

});