RecyclerView:如何捕捉 ImageView 上的 onClick?
RecyclerView: how to catch the onClick on an ImageView?
我的 RecyclerView 的 CardView 中有一个 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);
我能做什么?
在您的 Viewholder class 中,您可以设置 OnClickListener,但您需要另一个接口才能将您的 OnClick 寄存器传递回您的适配器(或您的预期目标所在的任何地方)。
这是我在我的项目中所做的。
在你的项目中的某处有一个接口class:
public interface RecyclerViewClickListener {
void onRowClicked(int position);
void onViewClicked(View v, int position);
}
在你的RecyclerView.Adapterclass中,添加这个接口作为一个字段并通过构造函数将它传递给适配器:
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());
}
});
}
}
}
在您的 Activity / 片段中实现接口:
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
}
}
我的 RecyclerView 的 CardView 中有一个 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);
我能做什么?
在您的 Viewholder class 中,您可以设置 OnClickListener,但您需要另一个接口才能将您的 OnClick 寄存器传递回您的适配器(或您的预期目标所在的任何地方)。
这是我在我的项目中所做的。
在你的项目中的某处有一个接口class:
public interface RecyclerViewClickListener { void onRowClicked(int position); void onViewClicked(View v, int position); }
在你的RecyclerView.Adapterclass中,添加这个接口作为一个字段并通过构造函数将它传递给适配器:
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()); } }); } } }
在您的 Activity / 片段中实现接口:
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 } }