【发布时间】:2018-11-24 14:29:18
【问题描述】:
我有一个 RecyclerView 显示国家单选按钮列表,让用户选择他的国家。我不想要更多的点击项目,所以我在适配器的 onBindView 方法中编写了这个 OnCheckListener,但是每当我点击一个 RadioButton 时,其他几个按钮都会随之切换。
@Override
public void onBindViewHolder(final com.example.ameer.ta7adialma3rifa.adapters.CountriesAdapter.ViewHolder holder, final int position) {
String name = mData.get(position).getName();
int imgId = mData.get(position).getImageId();
holder.radioButton.setText(name);
holder.flagImageView.setImageResource(imgId);
holder.radioButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
RadioButton button = (RadioButton) compoundButton;
if (!button.getText().equals(mData.get(position).getName())){
button.setChecked(false);
}
if (runnable != null){
runnable.run();
}
runnable = new Runnable() {
@Override
public void run() {
holder.radioButton.setChecked(false);
}
};
}
});
}
【问题讨论】:
-
runnable有什么用??
-
移除 Runnable。由于您的
holder.radioButton.setChecked(false);在 Runnable 上运行,因此它与 recyclerview 项目的位置相混淆。 -
runnable是用来取消选中上一个选中按钮的,所以当我点击一个按钮时,它会取消选中之前选中的那个,将选中的按钮一次限制为一个。
-
它不会像你预期的那样工作。尝试运行一个 for 循环并删除其他项目的选中状态。
-
我不明白你的逻辑。但请记住,viewholder 重用了视图。例如,如果您的第 4 个单选按钮在一段时间后被检查,您的下一个单选按钮也将被检查。在查看器中的 if 语句中要小心。如果你放一个 if 语句,那么也放一个 else 语句。
标签: java android radio-button android-recyclerview