我IconicAdapter
延长了ArrayAdapter
:
class IconicAdapter extends ArrayAdapter<String> {
IconicAdapter() {
super(MyService.this, R.layout.activity_listview, R.id.text1, entries);
}
@Override
public View getView(int position,View convertView,ViewGroup parent) {
View row=super.getView(position, convertView, parent);
ImageView icon=(ImageView)row.findViewById(R.id.img1);
icon.setImageResource(R.drawable.ic_launcher);
return(row);
}
}
当我使用添加方法时,它会添加两次:
IconicAdapter ia=new IconicAdapter();
lv.setAdapter(ia);
ia.add("1000");
为什么会这样?
答案 0 :(得分:2)
我遇到了同样的问题,但事实证明这对我来说是一个非常愚蠢的错误。也许这会帮助一些人。问题是我在ArrayAdapter
和列表中添加了两次项目。
基本上,如果你使用构造函数:
ArrayAdapter(Context context, int resource, List<T> objects)
或
ArrayAdapter(Context context, int resource, int textViewResourceId, List<T> objects)
然后你应该避免保留对你传递的objects
列表的引用,因为适配器只保留对它的引用而不复制它的值。如果您需要从其他地方了解这些对象的值,则可以复制它们,或者只使用getCount()
和getItem(int position)
方法来访问它们。您绝对应该避免尝试修改ArrayAdapter
引用的数组或列表。
希望这有助于某人:D
答案 1 :(得分:0)
我认为问题在于此。
IconicAdapter ia=new IconicAdapter();`
您正在将适配器添加到列表中,此处您已经是适配器。
lv.setAdapter(ia);
然后在这里你想做什么。
iv.add("1000"); here add something in listview not in adapter