Recyclerview滚动问题

时间:2016-09-27 10:09:24

标签: android android-recyclerview

有谁知道,如何用复选框处理RecyclerView滚动问题?

我在Recyclerview中使用多个复选框为视图充气,在我滚动Recyclerview后选中复选框后,取消选中已选中的复选框。

如何防止在Android中的Recyclerview中取消选中复选框。

5 个答案:

答案 0 :(得分:1)

这是一个常见的问题,使用setTag()和getTag()来克服这种情况。下面的代码会给你一个想法:

@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);

  }

 }

答案 1 :(得分:0)

您已在List<Object>每个位置维护此项,然后在该位置的 onBindViewHolder 方法中对其进行选中或取消选中

答案 2 :(得分:0)

最简单的方法是使用Model类For Example

class ModelDemo{

private boolean isChecked; 

} 

在onBindViewHolder方法

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

}else{
    chkbox.setSelected(false);
    }

答案 3 :(得分: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;
             }    
          }
       });
    }
}

答案 4 :(得分:-1)