gpt4 book ai didi

android - ListView 自定义适配器重复项

转载 作者:行者123 更新时间:2023-11-29 17:19:54 24 4
gpt4 key购买 nike

这个适配器有什么问题,当我向下滚动时,我看到底部有重复的行,然后当再次向上滚动时,我也看到顶部有重复的行,这些行以前不存在,其余的 Data项目没有出现

适配器:

public class ClassesListViewAdapter extends BaseAdapter {
private Context mContext;
ArrayList<String> Data = new ArrayList<>();


public ClassesListViewAdapter(Context context, ArrayList<String> data) {
Data = data;
mContext = context;
}

@Override
public Object getItem(int position) {
return position;
}

@Override
public long getItemId(int position) {
return position;
}

@Override
public int getCount() {
return Data.size();
}
private class ViewHolder{

TextView ClassDataTV;

}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = ((Activity)mContext).getLayoutInflater();
ViewHolder holder;
if (convertView == null) {
convertView = inflater.inflate(R.layout.classes_list_view_item, parent, false);
holder = new ViewHolder();
holder.ClassDataTV = (TextView) convertView.findViewById(R.id.ClassDataTV);
holder.ClassDataTV.setText(Data.get(position));
convertView.setTag(holder);
}else{
holder=(ViewHolder)convertView.getTag();
}

return convertView;
}
}

下面是我如何使用它:

    ArrayList<String> v = new ArrayList<>();
v.add("AAAAAAA");
v.add("WWWWWwW");
v.add("VVVVVVV");
v.add("SSSSSSSSS");
v.add("QQQQQQQQQ");
v.add("YYYYYYYY");
v.add("TTTTTTT");
v.add("UUUUUUUUUU");
v.add("zzzzzzzzzzzz");
v.add("CCCCCCCCCC");
v.add("HHHHHHHHHHH");
v.add("IIIIIIIIII");
v.add("PPPPPPPPP");
mListView.setAdapter(new ClassesListViewAdapter(getActivity(), v));

最佳答案

将以下部分代码放在 if-block 之外,它将得到修复:

  @Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = ((Activity)mContext).getLayoutInflater();
ViewHolder holder;
if (convertView == null) {
convertView = inflater.inflate(R.layout.classes_list_view_item, parent, false);
holder = new ViewHolder();
holder.ClassDataTV = (TextView) convertView.findViewById(R.id.ClassDataTV);

convertView.setTag(holder);
}else{
holder=(ViewHolder)convertView.getTag();
}

// initialize your view here
holder.ClassDataTV.setText(Data.get(position));
return convertView;
}

ViewHolder 模式背后的逻辑告诉你应该这样做。当您滚动时,一些引用将不会再次创建并且 else block 被调用,因此这会导致您的列表未按预期更新。

关于android - ListView 自定义适配器重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37037746/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com