OnClick在RecyclerView适配器中未触发
问题描述:
我的RecyclerView
包含单选按钮。当我点击一个我的下面的实现应该取消选择所有其他(notifyDataSetChanged()
应重新绑定所有行)。出人意料的是,onClick
永远不会触发:OnClick在RecyclerView适配器中未触发
public class NameAdapter extends RecyclerView.Adapter<NameAdapter.NameHolder> {
private List<String> myNames;
private int selectedPosition = -1;
public NameAdapter(List<String> names) {
myNames = names;
}
@Override public NameHolder onCreateViewHolder(ViewGroup parent, int viewType) {
Context context = parent.getContext();
View view = LayoutInflater.from(context).inflate(R.layout.name_item, parent, false);
return new NameHolder(view);
}
@Override public void onBindViewHolder(NameHolder holder, int position) {
String name = myNames.get(position);
holder.name.setText(name);
holder.radioButton.setChecked(position == selectedPosition);
}
@Override public int getItemCount() {
return myNames.size();
}
public class NameHolder extends RecyclerView.ViewHolder {
private TextView name;
private RadioButton radioButton;
public NameHolder(View itemView) {
super(itemView);
name = (TextView) itemView.findViewById(R.id.name);
radioButton = (RadioButton) itemView.findViewById(R.id.radio_button);
View.OnClickListener clickListener = new View.OnClickListener() {
@Override public void onClick(View v) {
selectedPosition = getAdapterPosition();
notifyDataSetChanged();
}
};
itemView.setOnClickListener(clickListener);
}
}
}
答
使用下列方法之一触发点击事件。
public class NameHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
private TextView name;
private RadioButton radioButton;
public NameHolder(View itemView) {
super(itemView);
name = (TextView) itemView.findViewById(R.id.name);
radioButton = (RadioButton) itemView.findViewById(R.id.radio_button);
itemView.setOnClickListener(this);
}
@Override
public boolean onClick(View v) {
//Put your code here
}
}
+1
我已经试过这个,它也没有工作;这只是我做到这一点的另一种方法。 – user3148156
+0
在xml视图中尝试setClickable =“true”。 –
我可以尝试http://*.com/questions/24471109/recyclerview-onclick?rq=1但我主要关心的是,为什么不设置对项目工作的听众? – user3148156
你的代码似乎在我的模拟器中正常工作。然后再次,我不得不写我自己的活动,所以也许你的问题不是适配器类 – 0X0nosugar