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メソッドを使用している場合、2 回追加されます。

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

そうなる理由は?

4

2 に答える 2

2

私は同じ問題を抱えていましたが、それは私の側の非常にばかげた間違いでした. たぶん、これは一部の人々を助けるでしょう。問題は、アイテムを含むリストとリストの両方に、アイテムを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

于 2014-06-12T12:34:20.870 に答える