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