问题描述
我有一个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
方法,适配器将更新单选按钮可绘制/背景资源。