安卓RecyclerView,回收利用功能无法正常工作

3

我有一个正在使用的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);
    }
}
1个回答

8

onBindViewHolder 会重复使用视图,因此第一次调用 onBindViewHolder()时,infonull。 这将导致该行的可见性为 View.GONE

onBindViewHolder 再次被调用以绑定新的行时,该行的视图仍然是 View.GONE,在绑定行之间没有重置任何内容。

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

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接