Show/Hide 在 RecyclerView 中查看工具栏中的任何事件

Show/Hide views in RecyclerView on any event in Toolbar

我在工具栏中有一个 Switch 按钮,在 RecyclerView 中有两个 TextViews

我想根据 Switch 的状态管理 RecyclerViewTextViews 之一的可见性。

我已将 OnCheckedChangeListener 添加到 Switch 并在此处将布尔值 FLAG 设置为 FALSETRUE。此 FLAG 值在 AdapteronBindViewHolder(-,-) 方法中读取,我根据 FLAG.

将视图可见性设置为 VISIBLE/GONE

在 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);
        ...
    }

如何在 Toolbar 的任何事件中设法 show/hide 在 RecyclerView 中观看?

您最好有一个模型,其中包含一个文本字段和一个用于处理可见性的字段,然后将此模型的列表传递给 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());
    ...
}