android - RecyclerView 中的单个 RadioButton

android - Single RadioButton in RecyclerView

我有一个 RecyclerView,其项目仅包含 RadioButton,我的适配器创建了具有某些位置的 RecyclerView - 可以是 5-10 个位置,每个位置都有 RadioButton。但是这些RadioButtons不在同一个RadioGroup中,因为它们都在不同的RecyclerView位置。有什么办法可以设置单选吗?

PS:我找到了这个,但它都是关于 RecyclerView 位置中的 RadioGroups,我只有 RadioButtons。

您可以通过使用 boolean 变量 isChecked.

创建模型 class 来管理它

当你 select 一个 RadioButton 首先为所有的人做 isChecked = false 然后为你的 selected 按钮做真然后调用 notifyDataSetChanged.

在适配器中使用

radioButton.setChecked(list.get(position).isChecked())

一定能帮到你。

我遇到了同样的问题。根据 Vishal Chhodwani 的回答,我编写了以下解决方案,希望它可以帮助其他读者。

class MyRecycler extends RecyclerView.Adapter<MyRecycler.RecyclerViewHolder> {

    static class RecyclerViewHolder extends RecyclerView.ViewHolder {
        @BindView(R.id.aRadioButton)
        RadioButton rb;

        public RecyclerViewHolder(View itemView, int viewType, final Context context) {
            super(itemView);
            ButterKnife.bind(this, itemView);
        } 
    }

    private List<MyModel> list;
    private RadioButton selectedRadioButton;  

    // Constructor and other methods here...

    @Override
    public void onBindViewHolder(final MyRecycler.RecyclerViewHolder holder, int position) {

        RadioButton radioButton = holder.rb;
        radioButton.setChecked(list.get(position).isChecked());

        radioButton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                // Set unchecked all other elements in the list, so to display only one selected radio button at a time 
                for(MyModel model: list)
                    model.setChecked(false);

                // Set "checked" the model associated to the clicked radio button
                list.get(position).setChecked(true);

                // If current view (RadioButton) differs from previous selected radio button, then uncheck selectedRadioButton
                if(null != selectedRadioButton && !v.equals(selectedRadioButton))
                    selectedRadioButton.setChecked(false);

                // Replace the previous selected radio button with the current (clicked) one, and "check" it
                selectedRadioButton = (RadioButton) v;
                selectedRadioButton.setChecked(true);                    

        });
    }
}

KOTLIN 2021 测试

不管数据列表大小

只有RadioButton没有RadioGroup的单选RecyclerView及其测试

在您的适配器中的变量中声明一个 RadioButton class:

private var lastCheckedRB: RadioButton? = null

现在在你的 Adapter class onBindViewHolder 中,将 OnclickListener 写入 RadioButton:

holder.YOURRADIOBUTTON.setOnClickListener {
    if (lastCheckedRB!=null){
         lastCheckedRB?.isChecked=false
    }
    lastCheckedRB = holder.YOURRADIOBUTTON
}