hel*_*ind 5 android imageview android-cardview android-recyclerview
我在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");
}
Run Code Online (Sandbox Code Playgroud)
但这完全被忽略了.以下代码正在运行:
myViewHolder.imageView.setImageResource(R.drawable.star_yellow);
Run Code Online (Sandbox Code Playgroud)
我能做什么?
Tom*_*cic 16
这是我在项目中所做的事情.
在项目的某处有一个接口类:
public interface RecyclerViewClickListener {
void onRowClicked(int position);
void onViewClicked(View v, int position);
}
Run Code Online (Sandbox Code Playgroud)在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());
}
});
}
}
}
Run Code Online (Sandbox Code Playgroud)在Activity/Fragment中实现接口:
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
}
}
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
5716 次 |
| 最近记录: |