2016-03-03 2 views
1

Мой RecyclerView - это список с флажками, а внизу страницы - кнопка отправки. Когда я нажимаю на кнопку, флажки должны быть отключены, но состояние тех ящиков, которые уже проверены, должно сохраняться. А также, как получить доступ к флажку, так как он находится в RecyclerView.ViewHolder? Помоги пожалуйста.Отключить элементы в RecyclerView android

ответ

-2

Вы можете попробовать это:

RecyclerView rv=new RecyclerView(context); 
    rv.getChildAt(5).setEnabled(false); // disables the 6th element 
1

Это гораздо лучше, чтобы это как атрибут к элементу, который вы моделирования.

Итак, если элемент модели будет иметь состояние «включено», которое вы можете изменить.

public class Model { 

    private boolean isEnabled; 
    private boolean isChecked; 

    public void setEnabled(boolean enabled) { 
     isEnabled = enabled; 
    } 

    public void setChecked(boolean checked) { 
     isChecked = checked; 
    } 

    public boolean isEnabled() { 
     return isEnabled; 
    } 

    public boolean isChecked() { 
     return isChecked; 
    } 
} 

Тогда ваш ViewHolder будет проверять этот атрибут каждый раз, когда вы привязываетесь к нему. Кроме того, сам ViewHolder будет прослушивать изменения в флажке View, который он обрабатывает.

public class ModelViewHolder extends RecyclerView.ViewHolder implements CompoundButton.OnCheckChangeListener { 
    private CheckBox checkBox; 
    private Model boundItem; 

    public ModelViewHolder(View itemView) { 
     checkBox = (CheckBox) itemView.findItemById(R.id.checkBoxId); 
     checkBox.setOnCheckChangeListener(this); 
    } 

    public void bind(Model model) { 
     boundItem = model; 
     getItemView().setEnabled(model.isEnabled()); 
     checkBox.setChecked(model.isChecked()); 
    } 

    @Override 
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
     boundItem.setChecked(isChecked); 
    } 
} 

Теперь, что это позволяет это состояние элемента будет соответствовать в то время как пользователь прокручивает (поскольку просмотров в RecyclerItem повторно используются). Он также позволяет вам легко использовать notifyItemChanged(int position), когда вы включаете/отключите элемент «Модель».

+0

Есть ли способ получить доступ к флажку ViewHolder на классе фрагментов? – fmpsagara

+0

Технически да, но зачем вам это нужно? Флажок не так важен, как значение. – DeeV

+0

Важно знать, что флажок «Вид» (флажок) является временным. Там всего столько, сколько видимых на экране (плюс один или два). Если у вас есть сотня предметов, то может быть только 10 флажков. Если вы хотите узнать значение предмета 99, вы не сможете его получить. – DeeV

0

Вам нужно будет получить свой товар в списке, который вы передали адаптеру. Если это настраиваемый адаптер, вы можете сделать способ для возврата своего списка, а код будет:

mAdapter.getList().get(4).setEnabled(false); //or equivalent 
mAdapter.notifyDataSetChanged(); //or mRecycler.getAdapter().notifyDataSetChanged() 
Смежные вопросы