2016-09-27 191 views
1

有誰知道,如何處理RecyclerView滾動問題與複選框?Recyclerview滾動問題

我使用Recyclerview中的多個複選框來增加視圖的空間,並在滾動Recyclerview時檢查複選框後,選中的複選框將被取消選中。

如何防止在Android中的Recyclerview中取消選中複選框。

+0

你使用ViewHolders嗎?您必須在ViewHolder中存儲每個複選框的狀態 –

+0

請將您的代碼發佈到您嘗試過的地方......對於提示在您的bean類中,使用布爾變量使其getter setter保持其狀態,並在複選框單擊時調用notifydatasetchanged並設置值再次... –

+0

您可以在模型中存儲複選框的檢查條件,並根據位置設置正確的檢查值 –

回答

0

你必須保持這個在您的List<Object>每個位置,然後在onBindViewHolder在該位置方法使得選中或取消選中

0

最簡單的方法就是使用Model類例如

class ModelDemo{ 

private boolean isChecked; 

} 

在onBindViewHolder方法

if(objects(position).isChecked()){ 
    chkbox.setSelected(true); 

}else{ 
    chkbox.setSelected(false); 
    } 
1

這是一個常見的問題,使用setTag()和getTag()來克服這個situation.The下面的代碼會給你一個想法:

@Override 
public void onBindViewHolder(ViewHolder viewHolder, int position) { 

    final int pos = position; 


    viewHolder.chkSelected.setChecked(yourList.get(position).isSelected()); 

    viewHolder.chkSelected.setTag(yourList.get(position)); 


    viewHolder.chkSelected.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 
    CheckBox cb = (CheckBox) v; 
    YourList list = (YoutList) cb.getTag(); 

    list.setSelected(cb.isChecked()); 
    yourList.get(pos).setSelected(cb.isChecked()); 

    Toast.makeText(
     v.getContext(), 
     "Clicked on Checkbox: " + cb.getText() + " is " 
     + cb.isChecked(), Toast.LENGTH_LONG).show(); 
    } 
    }); 

} 


public static class ViewHolder extends RecyclerView.ViewHolder { 

    public CheckBox chkSelected; 

    public YourList yourList; 

    public ViewHolder(View itemLayoutView) { 
    super(itemLayoutView); 

); 
    chkSelected = (CheckBox) itemLayoutView 
    .findViewById(R.id.chkSelected); 

    } 

} 
+0

正確,並指向... @GParekar ...按照此答案 –

0

將保存的狀態保存在保存器(或適配器)中,並將該信息保存在onBindViewHolder中

public void onBindViewHolder(ViewHolder holder){ 
    .... 
    holder.checkbox.setChecked(checked); 
} 

class ViewHolder extends RecyclerView.ViewHolder { 
    CheckBox checkbox; 
    boolean checked = false; 
    ... 
    ViewHolder(View v){ 
     super(v); 
     ... 
     checkbox.setOnCheckedChangeListener(new OnCheckedChangeListener(){ 
      @Override 
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked){ 
      if (isChecked){ 
        checked = isChecked; 
      }  
      } 
     }); 
    } 
}