如何更改 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 资源。
我有一个 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 资源。