recyclelerview hide / show基于具有多种视图类型的boolean

时间:2018-03-05 12:22:11

标签: android android-recyclerview

我有3个viewtypes要在recyclerview中显示。

--------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是一个单一实例,其中viewtype 2& 3可以是多个实例的未知数量

现在,当我点击viewtype 1时,我想切换隐藏/显示viewtype 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;
}

然后我还在onCreateviewholder

中放置了viewtype2:的条件
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

1 个答案:

答案 0 :(得分:0)

您应该在onBindViewHolder()而不是onCreateViewHolder()中进行任何更改,因为只有在创建新的ViewHolder时才会调用onCreateViewHolder(),并且会调用onBindViewHolder()每当数据发生变化您可以通过弄乱视图类型来强制调用onCreateViewHolder(),但这是最简单的解决方案。