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