为什么ViewHolder上的OnClickListener不起作用?

Gia*_*uca 21 android onclick onclicklistener android-recyclerview

我正在尝试实现一种处理项目选择的方法RecyclerView.我个人不喜欢在通过手势的一些答案中建议的方式,我认为实施一个OnClickListener,如这里这里所建议的那样,更清洁.

事实是......这种模式实际上并不起作用!我真的无法理解,为什么我OnClickListener.onClick永远不会被调用.它有点像另一种方法拦截点击之前onClick可以处理它.

这是我的代码:

    public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
        TextView tvName;
        ImageView star;

        public ViewHolder(View itemView) {
            super(itemView);

            tvName = (TextView) itemView.findViewById(R.id.CHAT_ITEM_name);
            star = (ImageView) itemView.findViewById(R.id.CHAT_ITEM_star);

            Fonts.setTypeface(tvName, regular);
        }

        @Override
        public void onClick(View view) {
            int position = getLayoutPosition();
            select(position);
        }
    }
Run Code Online (Sandbox Code Playgroud)

不幸的是,能够访问整个数据集中被点击项目的位置非常重要,以便将其删除,所以做一些类似的事情indexOfChild也是不可接受的:我试过了,但是这个方法可以为你提供项目的位置在列表的可见部分中,因此变得list.remove(position)不可能.

mob*_*to7 51

查看更新的代码:您没有将onClickListener设置为ViewHolder中的任何视图.忘记点击监听器是一个可以理解的错误.

只需使用:

tvName.setOnClickListener(this);
star.setOnClickListener(this);
Run Code Online (Sandbox Code Playgroud)

您可以设置为两者或仅设置其中一个.您还可以简单地获取这两个视图的父布局,以便适配器中的整个项目本身可以单击.

itemView.setOnClickListener(this);
Run Code Online (Sandbox Code Playgroud)