我正在使用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<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);
}
}
答案 0 :(得分:8)
onBindViewHolder
重新使用视图,因此我们假设第一次调用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);
}
这将确保正确设置每一行的可见性。