【问题标题】:recyclerview hide/show based on boolean with multiple view typesrecyclerview 隐藏/显示基于具有多种视图类型的布尔值
【发布时间】:2018-03-05 12:22:10
【问题描述】:

我有 3 种视图类型要显示在回收站视图中。

--------view type 1 ----------
--------view type 2 ----------
--------view type 2 ----------
--------view type 3 ----------
--------view type 3 ----------
--------view type 3 ----------
--------view type 3 ----------
--------view type 3 ----------

视图类型 1 是单个实例,其中视图类型 2 和 3 可以是未知数量的多个实例

现在,当我单击视图类型 1 时,我想切换隐藏/显示视图类型 2 的所有实例

为此,我正在尝试以下方法:

在主recyclerview适配器类中定义一个布尔变量

private boolean mShowsView;

然后在 viewtype1 上使用 onclick 我将其更改为 true 或 false

@Override
public PersonViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.cardviewsearchsuggested, parent, false);
    SearchSuggestRVAdapter.PersonViewHolder viewHolder = new SearchSuggestRVAdapter.PersonViewHolder(v);
    viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {

        if(mShowsView){
            mShowsView = false;
        }
        else{
            mShowsView = true;
        }
        notifyDataSetChanged();

    }
    return pvh;
}

然后我还把 viewtype2 的条件放在 onCreateviewholder 中

View v1 = inflater.inflate(R.layout.cardviewsearchsuggested, parent, false);
viewHolder = new PersonViewHolderSuggested(v1);
if(!mShowsView){
    viewHolder.itemView.setVisibility(View.VISIBLE);
}
else{
    viewHolder.itemView.setVisibility(View.GONE);
    viewHolder.itemView.setLayoutParams(new RecyclerView.LayoutParams(0, 0));
}

点击viewtype1后mShowsView值切换但不刷新viewtype2

【问题讨论】:

    标签: android android-recyclerview


    【解决方案1】:

    您应该将想要进行的任何更改放入onBindViewHolder() 而不是onCreateViewHolder(),因为onCreateViewHolder() 仅在创建新ViewHolder 时调用,而onBindViewHolder() 则在数据更改时调用。您可以通过混淆视图类型来强制调用onCreateViewHolder(),但这是最简单的解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多