[英]Remove view which is not associated with List from RecyclerView
我有2种项目类型的RecyclerViewAdapter
。 ArrayList
所有HeaderViewHolder
ItemViewHolder
,一个headerView的HeaderViewHolder。 我可以从ArrayList
删除项目,然后使用notifyItemRemoved(position)
以便从RecyclerView
删除notifyItemRemoved(position)
。 但是,如何删除与ArrayList
不关联的headerView?
以下是RecyclerViewAdapter
一些代码:
private static final int TYPE_HEADER = 0;
private static final int TYPE_ITEM = 1;
private List<Offer> mValues;
OfferListAdapter(List<String> items) {
mValues = items;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if (viewType == TYPE_ITEM) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.itemView, parent, false);
return new ItemViewHolder(v);
} else if (viewType == TYPE_HEADER) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.headerView, parent, false);
return new HeaderViewHolder(v);
}
return null;
}
@Override
public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) {
if (holder instanceof ItemViewHolder) {
ItemViewHolder userViewHolder = (ItemViewHolder) holder;
} else if (holder instanceof HeaderViewHolder) {
HeaderViewHolder headerViewHolder= (HeaderViewHolder) holder;
}
}
@Override
public int getItemViewType(int position) {
if (isPositionHeader(position))
return TYPE_HEADER;
return TYPE_ITEM;
}
private boolean isPositionHeader(int position) {
return position == 0;
}
private Offer getItem(int position) {
return mValues.get(position - 1);
}
@Override
public int getItemCount() {
return mValues.size() + 1;
}
至少从适配器的角度来看,HeaderView 是列表的一部分。
您说isPositionHeader(pos -> pos == 0)
表示列表的第一项是标题视图,然后告诉适配器列表中包含mValues.size() + 1
项。 +1
弥补第一位的标头。
那么如何再次删除该视图?
如果要打开/关闭它...您需要一些可以在状态之间切换的东西。 为什么不使用boolean
? 您可能有一些isShowingHeader
字段,该字段指示是否显示标题。
这将如何影响您的代码? 好吧...与上面相同的代码...
// if we show the header, the 0 position is the header
isPositionHeader(pos -> isShowingHeader && pos == 0)
为了您的清单大小...
// list is longer by 1 when showing a header
mValues.size() + (isShowingHeader ? 1 : 0)
当显示/隐藏标题时,您现在只需更新isShowingHeader
并调用notifyDataSetChanged()
即可将更改的值通知适配器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.