Показать / Скрыть представления в RecyclerView для любого события на панели инструментов - PullRequest
0 голосов
/ 08 мая 2019

У меня есть кнопка Switch на панели инструментов и две TextViews в RecyclerView.

Я хочу управлять видимостью одного из TextViews в RecyclerView в зависимости от состоянияSwitch.

Я добавил OnCheckedChangeListener к Switch и задаю логическое значение FLAG для TRUE из FALSE здесь.Это значение FLAG считывается в onBindViewHolder(-,-) методе Adapter, и я устанавливаю видимость просмотра на VISIBLE/GONE на основе FLAG.

В MainActivity:

Switch switchView;
private boolean switchFlag;

public boolean isSwitchFlag() {
    return switchFlag;
}

public void setSwitchFlag(boolean switchFlag) {
    this.switchFlag = switchFlag;
}

protected void onCreate(Bundle savedInstanceState) {
    ...

    switchView.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            setSwitchFlag(isChecked);
            adapter.notifyDataSetChanged();
            //recyclerView.refreshDrawableState()        
        }
    });

    ...
}

В адаптере:

public void onBindViewHolder(ViewHolder viewHolder, Cursor cursor) {
    if (((MainActivity) mContext).isSwitchFlag()) {
        viewHolder.textView.setVisibility(View.VISIBLE);
        ...
    }

Как мне удается показать / скрыть представления в RecyclerView для любого события в Toolbar?

1 Ответ

1 голос
/ 08 мая 2019

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

class ListItem {
   private String text;
   private boolean isVisible;
   //...put getter and seeter methods
}

В OnCheckChangeListener вы можете изменить видимость элементов:

switchView.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        for (ListItem item: mItems) {
            item.setVisiblity(isChecked);
        }
        adapter.notifyDataSetChanged();
    }
});

И, наконец, в разделе onBindViewHolder вы можете управлять видимостью элементов.

public void onBindViewHolder(ViewHolder viewHolder, int position) {

    viewHolder.textView.setVisibility(mItems.get(position).isVisible() ? View.VISIBLE : View.GONE);
    viewHolder.textView.setText(mItems.get(position).getText());
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...