ArrayAdapter的add方法添加两次

时间:2013-05-13 06:21:41

标签: android android-arrayadapter

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

为什么会这样?

2 个答案:

答案 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