如何在RecyclerView中更改所有单选按钮的drawable src?

问题描述

我有一个RecyclerView,每个项目都包含文本和一个紫色单选按钮。没有选择认的单选按钮。如果用户尝试在不选择任何单选按钮的情况下进入下一个屏幕,我希望所有单选按钮的可绘制区域从紫色变为红色,提示用户选择其中一个。然后,如果用户选择了单选按钮之一,则所有按钮的状态应返回到紫色,而所选按钮为深紫色。

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

解决方法

您可以在“回收者视图”中获取每个孩子的视图,然后可以从该视图中引用单选按钮并更改其可绘制对象。下面的示例:

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);
}
,

我已经找到解决方案。

首先,我在if类的bind内添加了ViewHolder检查,如下所示:

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

在出现错误情况时,我会在活动类中更新isError变量的状态,然后调用notifyDataSetChanged()

例如,

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

其他信息: 错误条件是通过使用MutableLiveData在ViewModel类内部设置的,并在活动中观察到。每当出现错误情况时,即不选中单选按钮,将在活动内部调用checkForErrorCondition方法,适配器将更新单选按钮可绘制/背景资源。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...