2013-05-13 38 views
0

IconicAdapter延伸ArrayAdapterArrayAdapter的add方法添加两次

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

我认为问题在于此。

IconicAdapter ia=new IconicAdapter();` 

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

lv.setAdapter(ia); 

然后在这里,你想做什么。

iv.add("1000"); here add something in listview not in adapter 
+0

无眼镜蛇..做ia.add( “1000”);我只是添加一个项目到ListView .. – 2013-05-13 06:41:51

+0

然后请做这个..lv.add(“1000”); ..看到我的代码 – Unknown 2013-05-13 06:44:02

+0

我不明白。在ListView中没有诸如“add(String str)”之类的方法。这怎么可能是一个被接受的答案? – Ishaan 2016-06-09 12:34:46

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