gpt4 book ai didi

java - Android RecyclerView,回收工作不正常

转载 作者:太空宇宙 更新时间:2023-11-03 12:06:21 24 4
gpt4 key购买 nike

我有一个正在使用的 RecyclerView。我以前用过 RecyclerView 但从来没有遇到过这个问题。

当我上下滚动时,一些项目会消失,而一些消失的项目会再次出现在底部。

代码:

ViewHolder:

public class ViewHolder extends RecyclerView.ViewHolder {
public TextView txt;

public ViewHolder(View view) {
super(view);
txt = (TextView) view.findViewById(R.id.txt);
}
}

适配器:

public class MyAdapter extends RecyclerView.Adapter<ViewHolder> {
private final Activity activity;
private final ArrayList<HashMap<String, String>> mItems;

public MyAdapter (Activity activity, ArrayList<HashMap<String, String>> mItems) {
this.activity = activity;
this.mItems= mItems;
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
return new ViewHolder(LayoutInflater.from(activity).inflate(R.layout.items, viewGroup, false));
}

@Override
public void onBindViewHolder(ViewHolder viewHolder, int position) {
HashMap<String, String> item = mItems.get(position);

String info = item.get("info ");
if (info!= null) {
viewHolder.txt.setText(info);
} else {
viewHolder.txt.setVisibility(View.GONE);
}
}

@Override
public int getItemCount() {
return (null != mItems? mItems.size() : 0);
}
}

最佳答案

onBindViewHolder 重用 View ,所以假设第一次调用 onBindViewHolder() 时,infonull。这将导致该行具有 View.GONE 的可见性。

当再次调用 onBindViewHolder 以绑定(bind)新行时,该行的 View 仍然是 View.GONE - 绑定(bind)行之间没有任何重置。

因此您的 if 语句应该完全重置状态:

if (info!= null) {
viewHolder.txt.setText(info);
viewHolder.txt.setVisibility(View.VISIBLE);
} else {
viewHolder.txt.setVisibility(View.GONE);
}

这将确保正确设置每一行的可见性。

关于java - Android RecyclerView,回收工作不正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29324873/

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