Android RecyclerView,回收不正常

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

Adapter

 public class MyAdapter extends RecyclerView.Adapter { private final Activity activity; private final ArrayList<HashMap> mItems; public MyAdapter (Activity activity, ArrayList<HashMap> 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 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重用了Views,所以让我们说第一次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); } 

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