我有一个水平的Recyclerview,有单选按钮作为recyclerview项目。没有当前选中的单选按钮,我必须选择所有其他单选按钮为false。所以我做了 -
View.OnClickListener rbClick = new View.OnClickListener() {
@Override
public void onClick(View v) {
RadioButton checked_rb = (RadioButton) v;
if (lastCheckedRB != null && lastCheckedRB != checked_rb) {
lastCheckedRB.setChecked(false);
}
lastCheckedRB = checked_rb;
}
};
mainHolder.radioBtnTrip.setOnClickListener(rbClick);
当我有4到5件物品时它的工作正常。但是当它有超过5个项目时,由于视图回收,总是选择多个单选按钮为真。给定照片表示选择了第一个项目,但在滚动时选择了第10个单选按钮。
如何解决行项目位置问题。我必须一次只选择一个单选按钮,然后选择recyclerview的所有其他单选按钮为false。
答案 0 :(得分:0)
重写方法getItemViewType,根据视图的值(或其他)以多种不同方式格式化视图
@Override
public int getItemViewType(int position) {
// example
return 0;
}
然后,在你的onBindViewHolder方法
@Override
public void onBindViewHolder(Adapter.ViewHolder viewHolder, int position) {
if( this.getItemViewType(position)==1){
// layout #1
}else{
// layout #2
}
}
答案 1 :(得分:0)
了解recyclerview或listview的工作方式
在调用bindview时,您必须将检查状态存储在某处以进行更新,您可以在其中将已检查状态设置为true。
Listview或RecyclerView将在滚动时重复使用任何索引中的视图。
当您向后滚动时,您在之前选择的相同视图在同一索引上是不可能的。
答案 2 :(得分:0)
一种简单的方法是在相应的模型中创建一个属性,然后在onBindViewHolder()内部根据模型设置单选按钮checked属性