在RecyclerView android中的行项目视图位置问题

时间:2016-03-23 12:19:41

标签: android android-recyclerview

我有一个水平的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个单选按钮。

First image

2nd Image

如何解决行项目位置问题。我必须一次只选择一个单选按钮,然后选择recyclerview的所有其他单选按钮为false。

3 个答案:

答案 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属性