昨晚我正在编写代码并通过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()));
}
}
}
答案 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");
}
});
}
}