我在RecyclerView的CardViews中有一个ImageView。 我想抓住ImageView上的onClick,就像我已经使用ListView一样。所以,在 public void onBindViewHolder(RecyclerView.ViewHolder holder,final int position)我尝试过:
myViewHolder.imageView.setClickable(true);
myViewHolder.imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.d("TEST", "Clicked");
}
但这完全被忽略了。以下代码正在运行:
myViewHolder.imageView.setImageResource(R.drawable.star_yellow);
我该怎么办?
答案 0 :(得分:16)
这是我在项目中所做的事情。
在项目的某处有一个接口类:
public interface RecyclerViewClickListener {
void onRowClicked(int position);
void onViewClicked(View v, int position);
}
在您的RecyclerView.Adapter类中,将此接口添加为字段,并通过构造函数将其传递给适配器:
public class YourRecAdapter extends RecyclerView.Adapter<YourRecAdapter.SimpleViewHolder>{
private RecyclerViewClickListener listener;
public YourRecAdapter(RecyclerViewClickListener listener){
this.listener = listener;
}
public static class SimpleViewHolder extends RecyclerView.ViewHolder {
public SimpleViewHolder(View itemView, final RecyclerViewClickListener listener) {
super(itemView);
// find view ids here
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(listener != null)
listener.onRowClicked(getAdapterPosition());
}
});
someViewholderView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(listener != null)
listener.onViewClicked(v, getAdapterPosition());
}
});
}
}
}
在您的活动/片段中实施界面:
public class YourFragment extends Fragment implements RecyclerViewClickListener {
@Override
public void onViewClicked(View v, int position) {
if(v.getId == R.id.yourDesiredView){
// Do your stuff here
}
}
@Override
public void onRowClicked(int position) {
// Clicked entire row
}
}
答案 1 :(得分:0)
在Viewholder类中,您可以设置OnClickListener,但是您需要另一个接口才能将OnClick寄存器传递回适配器(或者您的目标所在的位置)。