2016-09-27 6 views
1

Кто-нибудь знает, как бороться с проблемой прокрутки RecyclerView с помощью флажков?Вопрос о прокрутке Recyclerview

Я раздуваю представление с несколькими флажками в Recyclerview и после проверки флажков при прокрутке Recyclerview, тогда отмеченные флажки будут отменены.

Как я могу предотвратить выбор флажков в Recyclerview на Android.

+0

Вы используете ViewHolders? Вы должны сохранить состояние каждого флажка в ViewHolder –

+0

Просьба опубликовать свой код, что вы пробовали ... Для подсказки В вашем классе bean используйте логическую переменную, чтобы ее установщик-получатель удерживал свое состояние и вызывал notifydatasgetanged on click on и устанавливал значение снова ... –

+0

Вы можете сохранить условие проверки флажка в модели и в зависимости от установленного положения правильное значение проверки –

ответ

0

Вы должны сохранить это в List<Object> в положение, а затем в onBindViewHolder метод в этом положении сделать это зарегистрированный или незарегистрированный

0

Простейший подход заключается в том, чтобы использовать класс модели для примера

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 ... следовать этому ans –

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; 
      }  
      } 
     }); 
    } 
} 
Смежные вопросы