我遇到RecyclerView
的问题,我RecyclerView
的每个行项目中都有radio button
和其他几个视图,
我想要的是,当用户选中RadioButton
时,我想取消选中其他RadioButton
(如果之前已检查过任何内容)。由于它是Recyclerview
我不能使用radiogroup。
在适配器onBindViewHolder
中,我为每个单选按钮编写了这个监听器
holder.radioButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
selectedPosition = holder.getAdapterPosition();
Toast.makeText(activity, "section: " + selectedPosition, Toast.LENGTH_SHORT).show();
}
});
如何取消选中上一个单选按钮? 换句话说,如何从另一个项目视图监听器更新recyclerview的特定项目中的视图属性?
答案 0 :(得分:2)
您需要在适配器中全局引用selectedItem,然后在用户检查新的单选按钮时更新所有项目。
public class Adapter extends RecyclerView.Adapter<Adapter.ViewHolder> {
private int selectedItemPosition = -1;
}
在适配器的onBindViewHolder()
方法中执行操作,
@Override
public void onBindViewHolder(final Adapter.ViewHolder holder, int position) {
holder.radioButton.setChecked(holder.getAdapterPosition()==selectedItemPosition);
holder.radioButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
selectedItemPosition = holder.getAdapterPosition();
notifyDataSetChanged();
}
});
}
答案 1 :(得分:1)
试试这个::
if (position == selectedPosition) {
holder.radioButton.setChecked(true);
Toast.makeText(activity, "section: " + selectedPosition, Toast.LENGTH_SHORT).show();
} else {
holder.radioButton.setChecked(false);
}
holder.radioButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
selectedPosition = holder.getAdapterPosition();
notifyDataSetChanged();
}
});