如何更改 RecyclerView 中所有单选按钮的可绘制 src?

How can I change the drawable src of all radio buttons in a RecyclerView?

我有一个 RecyclerView,每个项目都由文本和一个紫色单选按钮组成。没有默认单选按钮 selected。如果用户试图在没有 select 任何单选按钮的情况下转到下一个屏幕,我希望所有单选按钮的可绘制对象从紫色变为红色,提示用户 select 其中一个。然后,如果用户 select 使用了其中一个单选按钮,则所有按钮的状态都应返回紫色,并且 selected 按钮呈深紫色。

在普通列表视图中,我可以单独调用每个按钮。我应该如何在错误状态下更改回收器视图中所有按钮的可绘制对象?

您可以在 Recycler View 中获取每个子项的 View,并且您可以从该 View 引用单选按钮并更改其可绘制对象。示例如下:

RecyclerView.ViewHolder holder = recyclerView.findViewHolderForAdapterPosition(position);
RadioButton button = holder.itemView.findViewById(R.id.radio_button);
button.setBackgroundResource(R.drawable.purple_background);

现在只需迭代所有 RecyclerView 的子项并更改 RadioButton 的背景资源即可。

您可以使用此代码进行迭代:

for (int i = 0; i < recyclerView.getChildCount(); i++) {
     //do something here
}

您现在可以像这样更改所有 RecyclerView 的子单选按钮背景:

for (int i = 0; i < recyclerView.getChildCount(); i++) {
     //change the background to purple
     RecyclerView.ViewHolder holder = recyclerView.findViewHolderForAdapterPosition(position);
     RadioButton button = holder.itemView.findViewById(R.id.radio_button);
     button.setBackgroundResource(R.drawable.purple_background);
}

我已经找到解决办法了。

首先,我在 ViewHolder class 的 bind 中添加了一个 if 检查,如下所示:

         fun bind(slotInfo: String, position: Int) {
            if(isError) {
                binding.radiobutton.setBackgroundResource(R.drawable.red_circle)
            } else {
                binding.radiobutton.setBackgroundResource(R.drawable.purple_circle)
            }
         }

我在 activity class 中更新 isError 变量的状态,然后调用 notifyDataSetChanged().

例如,

        fun checkForErrorCondition() {
            if(errorCondition) {
                    adapter.isError = true
                    adapter.notifyDataSetChanged()
            } 
        }

额外信息: 使用 MutableLiveData 在 ViewModel class 内部设置错误条件,并在 activity 内部观察。每当出现错误情况时,即单选按钮未被选中,activity 中的 checkForErrorCondition 方法就会被调用,适配器会更新单选按钮 drawable/background 资源。