gpt4 book ai didi

java - 从 RecyclerView 中删除与 List 不关联的 View

转载 作者:行者123 更新时间:2023-12-02 13:37:59 27 4
gpt4 key购买 nike

我有 RecyclerViewAdapter 和 2 种项目类型。 ItemViewHolder 用于 ArrayList 中的所有 itemView,HeaderViewHolder 用于一个 headerView。我可以从 ArrayList 中删除项目,然后使用 notifyItemRemoved(position) 以便从 RecyclerView 中删除 itemView。但是如何删除与 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) 来指示列表的第一项是标题 View ,并告诉适配器您的列表有 mValues.size () + 1 其中的项目。 +1 用于弥补先出现的 header 。

那么如何再次删除该 View 呢?

<小时/>

如果你想打开/关闭它......你需要一些可以在状态之间切换的东西。为什么不使用 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)

当显示/隐藏 header 时,您现在只需更新 isShowingHeader 并调用 notifyDataSetChanged() 即可通知适配器您更改的值。

关于java - 从 RecyclerView 中删除与 List 不关联的 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42886837/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com