onClick没有在ViewHolder

时间:2015-08-13 12:43:34

标签: android onclick android-viewholder

昨晚我正在编写代码并通过onClick事件获得StackOverflow的帮助。我最终把它整理出来,但不得不采用与互联网上的教程不同的方式,我似乎无法以正确的方式使用它。

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

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

所以任何人都知道可能阻止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()));
        }

    }
}

1 个答案:

答案 0 :(得分:4)

试试这个。

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");

            }
        });

    }
}