0

我有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);
    }
}

当我使用add方法时,它添加了两次:

IconicAdapter ia=new IconicAdapter();
            lv.setAdapter(ia);
            ia.add("1000");

有什么理由这样吗?

4

2 回答 2

2

我有同样的问题,但事实证明这是我的一个非常愚蠢的错误。也许这会帮助一些人。问题是我在项目列表中和列表中添加了两次ArrayAdapter项目。

基本上,如果您使用构造函数:

ArrayAdapter(Context context, int resource, List<T> objects)

或者

ArrayAdapter(Context context, int resource, int textViewResourceId, List<T> objects)

那么您应该避免保留对objects您传递的列表的引用,因为适配器只是保留对它的引用而不复制其值。如果您需要从其他地方知道这些对象的值,那么要么复制它们,要么简单地使用getCount()andgetItem(int position)方法来访问它们。您绝对应该避免尝试修改ArrayAdapter.

希望这可以帮助某人:D

于 2014-06-12T12:34:20.870 回答
0

我认为问题是这样的。

IconicAdapter ia=new IconicAdapter();`

您正在将适配器添加到列表中,这里您已经是适配器。

 lv.setAdapter(ia);

那么这里是你想做的。

    iv.add("1000"); here add something in listview not in adapter
于 2013-05-13T06:39:40.903 回答