从RecyclerView Adapter Android隐藏并显示多视图持有人

问题描述 投票:2回答:2

我的自定义适配器中有两个视图支架

ViewHolder1位于位置0ViewHolder2位于位置1

当前具有视图效果很好。

现在我在MainActivity中有按钮。我想用外行的话做这样的事情

第一次单击时,它应该将ViewHolder1隐藏在位置0,并且应该向上移动ViewHolder2。第二次单击时,它应在位置0处查看Viewholder1并向下移动ViewHolder2。

我该如何实现?

android android-recyclerview recycler-adapter custom-adapter android-viewholder
2个回答
0
投票

如果数据在这样的列表中表示,

data = mutableListOf<BaseClass>(item1, item2)

然后您可以通过更新数据并通知适配器来删除第一个Viewholder

data.remove(0)
adapter.notifyItemRemoved(0)

然后,当您想再次添加它时,您可以这样做

data.add(0, item1)
adapter.notifyItemInserted(0)

请参见this以供参考。


0
投票

也许将整个项目视图的可见性更改为GONE或VISIBLE可能会有所帮助。

我不知道它是否有效,但是从理论上讲它可能有效(因为您似乎不愿意从数据源中删除项目)。

使用界面:

public interface itemVisibilityListener{

void itemVisibility(int position,int visibility);
}

活动中:

class MyActivity extends Activity implements itemVisibilityListener{

private int visible = View.VISIBLE;
private int gone = View.GONE;
private MyAdapter adapter;
........

//on create
adapter.setItemVisibilityListener(this);



@override
public void itemVisibility(int position , int visibility){

button.setEnabled(true);

if(position==0 && visibility==visible){

//item of position 0 is visible
button.setOnClickListener(new....{

adapter.hideItem1(true);


});

}else{

//item of position 1 is not visible

button.setOnClickListener(new....{

adapter.hideItem1(false);


});

}

button.setEnabled(false);

}


}

在您的适配器中:

class MyAdapter extends .......{

private int visible = View.VISIBLE;
private int gone = View.GONE;
private boolean hide = false;
private itemVisibilityListener listener;

public void hideItem1(boolean hide){

this.hide=hide;
this.notifyDataSetChanged();

}

public void setItemVisibilityListener(itemVisibilityListener listener){

this.listener=listener;

}

.........

//on bind view holder

public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int postion){

if(holder.getItemViewType == 0){

//item 1 binding

if(hide){
holder.itemView.setVisibility(gone);
listener.itemVisibility(0,gone);

}else{
holder.itemView.setVisibility(visible);
listener.itemVisibility(0,visible);
}

}else if(holder.getItemViewType == 1){

//item 2 binding

}


}


}
© www.soinside.com 2019 - 2024. All rights reserved.