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()
, info
为null
。 这将导致该行具有View.GONE
可见性。
再次调用onBindViewHolder
以绑定新行时,该行的视图仍为View.GONE
– 绑定的行之间不会重置任何内容。
因此,if语句应该完全重置状态:
if (info!= null) { viewHolder.txt.setText(info); viewHolder.txt.setVisibility(View.VISIBLE); } else { viewHolder.txt.setVisibility(View.GONE); }
这将确保正确设置每一行的可见性。