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



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

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

您可以在Recycler视图中获得每个子项的视图,并且可以从该视图中引用单选按钮并更改其可绘制性。以下示例:

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类的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)
}
}

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

例如,

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

额外信息:错误条件是通过使用MutableLiveData在ViewModel类中设置的,并在活动中观察到。只要出现错误情况,即单选按钮未选中,就会在活动内部调用checkForErrorCondition方法,适配器就会更新单选按钮可绘制/后台资源。

最新更新