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<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);

}

}

回答:

onBindViewHolder重用Views,因此可以说是第一次onBindViewHolder()调用infois

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);

}

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

以上是 Android RecyclerView,回收无法正常工作 的全部内容, 来源链接: utcz.com/qa/398513.html

回到顶部