Снимите флажок Android, отметьте все флажки на элементе Recycler - PullRequest
0 голосов
/ 29 сентября 2018

У меня есть утилита просмотра элементов с компонентом Checkbox и встроенной общей кнопкой «Проверить все».Когда я «снимаю галочку» с кнопки в элементе списка, я хочу снять галочку с обычного флажка «Выбрать все» вне представления переработчика.

У меня возникла проблема при доступе к общему флажку «Выбрать все» в адаптере.

В моем классе адаптера, добавленном ниже кода,

private class UserViewHolder extends RecyclerView.ViewHolder {
    public TextView title;
    public CheckBox commonCheckbox, itemCheckbox;
    public UserViewHolder(View view) {
        super(view);
        itemCheckbox=view.findViewById(R.id.itemcheckbox);
        title=view.findViewById(R.id.title);
        commonCheckbox = view.findViewById(R.id.commoncheckbox);
    }
}

В onBindViewHolder я реализовал следующий проверенный прослушиватель,

userViewHolder.itemCheckbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (isChecked){
                userViewHolder.commonCheckbox.setChecked(false);
            }
        }
    });

Но commonCheckbox показывает исключение нулевого указателя.Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 29 сентября 2018

Наконец-то я добился использования интерфейсного подхода.Код класса адаптера ниже,

//Interface class
public interface OnDataChangeListener{
    public void onDataChanged(int size);
}
//Listener discussion
OnDataChangeListener mOnDataChangeListener;
public void setOnDataChangeListener(OnDataChangeListener onDataChangeListener){
    mOnDataChangeListener = onDataChangeListener;
}
//Set listener
userViewHolder.itemCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (isChecked){
                mOnDataChangeListener.onDataChanged(homeworkdate.size());
            }
        }
    });

В коде класса активности ниже,

classAdapter.setOnDataChangeListener(new classAdapter.OnDataChangeListener() {
                        @Override
                        public void onDataChanged(int size) {
                            commonCheckbox.setChecked(false);
                        }
                    });
0 голосов
/ 29 сентября 2018

Держатель вида будет содержать макет переработанных элементов представлений, да, поэтому идентификатор будет отображаться не так «неправильно», как у вас есть идентификатор с таким именем, но представление о том, что он ищет идентификатор вэто не то же самое представление, в котором установлен общий флажок, именно поэтому он возвращает нуль.

Я считаю, что самым простым решением было бы передать слушателя в держатель представления и вызвать метод из слушателяснять общий флажок, когда ваш слушатель onCheckChanged называется

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...