我的自定义适配器中有两个视图支架
ViewHolder1位于位置0ViewHolder2位于位置1
当前具有视图效果很好。
现在我在MainActivity中有按钮。我想用外行的话做这样的事情
第一次单击时,它应该将ViewHolder1隐藏在位置0,并且应该向上移动ViewHolder2。第二次单击时,它应在位置0处查看Viewholder1并向下移动ViewHolder2。
我该如何实现?
如果数据在这样的列表中表示,
data = mutableListOf<BaseClass>(item1, item2)
然后您可以通过更新数据并通知适配器来删除第一个Viewholder
data.remove(0)
adapter.notifyItemRemoved(0)
然后,当您想再次添加它时,您可以这样做
data.add(0, item1)
adapter.notifyItemInserted(0)
请参见this以供参考。
也许将整个项目视图的可见性更改为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
}
}
}