onClick 不会在 ViewHolder 中执行

onClick doesn't get executed in ViewHolder

昨晚我正在编写代码,并通过 onClick 事件在 Whosebug 上获得了帮助。我终于解决了这个问题,但不得不以不同于互联网上的教程的方式进行,而且我似乎无法以正确的方式工作。

目前,我有一个适配器,它有一个可以从我的 activity 调用的接口。但是通常您应该在 ViewHolder 中实现 View.OnClickListener 并覆盖 onClick 方法。但是无论我尝试做什么,该方法都不会执行。即使我在当前 ItemView 上将 clickable 设置为 true 和 setOnClickListener。

我的工作解决方案是在 onBindViewHolder 中添加一个 clickListener,它在我的界面中执行一个函数,然后在我的 activity 中执行。哪个有效。

所以任何人都知道什么可以阻止 onClick 执行?没有错误,没有警告……什么都没有。也许还有第二个问题:我现在正在做的方法是不是一个坏方法,还是应该用 viewHolder 中的 onClick 来完成?

我的viewHolder

public class ParkingViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

    CardView cv;
    TextView parkingName;
    TextView parkingCapacity;

    ParkingViewHolder(View itemView) {

        super(itemView);
        itemView.setClickable(true);
        itemView.setOnClickListener(this);

        cv = (CardView)itemView.findViewById(R.id.cv);
        parkingName = (TextView)itemView.findViewById(R.id.parkingName);
        parkingCapacity = (TextView)itemView.findViewById(R.id.parkingCapacity);

    }

    @Override
    public void onClick(View v) {

        System.out.println("Doesnt get executed");
        // this should work but the system.out doesn't get executed either so problems should be somewhere else
        if(clickListener != null) {
            clickListener.itemClicked(v, getLayoutPosition(), parkings.get(getLayoutPosition()));
        }

    }
}

试试这个。

public class ParkingViewHolder extends RecyclerView.ViewHolder{

    CardView cv;
    TextView parkingName;
    TextView parkingCapacity;

    ParkingViewHolder(View itemView) {

        super(itemView);
        itemView.setClickable(true);
        itemView.setOnClickListener(this);

        cv = (CardView)itemView.findViewById(R.id.cv);
        parkingName = (TextView)itemView.findViewById(R.id.parkingName);
        parkingCapacity = (TextView)itemView.findViewById(R.id.parkingCapacity);


         parkingName.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                 System.out.println("executed");

            }
        });

    }
}