Java Android RecyclerView,回收工作不正常

Java Android RecyclerView,回收工作不正常,java,android,android-recyclerview,Java,Android,Android Recyclerview,我有一个我正在使用的RecyclerView。我以前使用过RecyclerView,但从未遇到过这个问题 当我上下滚动时,一些项目会消失,而一些消失的项目会再次出现在底部 代码: ViewHolder: public class ViewHolder extends RecyclerView.ViewHolder { public TextView txt; public ViewHolder(View view) { super(view);

我有一个我正在使用的
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);
    }
}
适配器

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);
    }
}
公共类MyAdapter扩展了RecyclerView.Adapter{ 私人最终活动; 私有最终阵列列表; 公共MyAdapter(活动,ArrayList mItems){ 这个。活动=活动; this.mItems=mItems; } @凌驾 公共视图持有者onCreateViewHolder(视图组视图组,int i){ 返回新的ViewHolder(LayoutInflater.from(activity).充气(R.layout.items,viewGroup,false)); } @凌驾 公共无效onBindViewHolder(ViewHolder ViewHolder,int位置){ HashMap item=mItems.get(位置); 字符串信息=item.get(“信息”); 如果(信息!=null){ viewHolder.txt.setText(信息); }否则{ viewHolder.txt.setVisibility(View.GONE); } } @凌驾 public int getItemCount(){ 返回值(null!=mItems?mItems.size():0); } }
onBindViewHolder
重用视图,因此假设第一次调用
onBindViewHolder()
info
null
。这将导致该行具有视图的可见性。已消失

当再次调用
onBindViewHolder
绑定新行时,该行的视图仍然是
view。GONE
-绑定的行之间不会重置任何内容

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

if (info!= null) {
    viewHolder.txt.setText(info);
    viewHolder.txt.setVisibility(View.VISIBLE);
} else {
    viewHolder.txt.setVisibility(View.GONE);
}
这将确保正确设置每行的可见性