【问题标题】:Clicking RadioButton "A" toggles RadioButton "B" RecyclerView单击 RadioButton "A" 切换 RadioButton "B" RecyclerView
【发布时间】: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


【解决方案1】:

您应该将单选按钮放在一个单选组中。这样,只有其中一个被选中。而且我不知道为什么要使用 runnable 来设置选中的单选按钮!希望对您有所帮助。

【讨论】:

  • 其实我需要使用recyclerView,因为国家很多,如果使用RadioGroup会导致outOfMemoryExeption
猜你喜欢
  • 1970-01-01
  • 2021-12-05
  • 1970-01-01
  • 1970-01-01
  • 2013-01-12
  • 1970-01-01
  • 1970-01-01
  • 2014-09-30
  • 2017-12-31
相关资源
最近更新 更多