1

最初の要素が選択されている場合、ArrayAdapter の値を更新したいと思います。

public ArrayAdapter<String> adapter;
String[] categoriesArray;    
...

adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, categoriesArray);
list.setAdapter(adapter);

list.setOnItemClickListener(new OnItemClickListener(){
    @Override
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
        if(arg2== Consts.GAME_CATEGORY_POSITION){

            adapter.clear();

            //Add new values to array
            categoriesArray = new String[subCategories.size()];
            for (int i=0; i<subCategories.size(); i++) {
                categoriesArray[i] = subCategories.get(i).getSub_name();                    
            }           
            adapter.notifyDataSetChanged();             
        }           
    }           
});

しかし、clear メソッド (アダプター) が例外をトリガーしました

12-27 09:37:57.376: E/AndroidRuntime(1423): java.lang.UnsupportedOperationException
12-27 09:37:57.376: E/AndroidRuntime(1423):     at java.util.AbstractList.remove(AbstractList.java:638)
12-27 09:37:57.376: E/AndroidRuntime(1423):     at java.util.AbstractList$SimpleListIterator.remove(AbstractList.java:75)
12-27 09:37:57.376: E/AndroidRuntime(1423):     at java.util.AbstractList.removeRange(AbstractList.java:658)
12-27 09:37:57.376: E/AndroidRuntime(1423):     at java.util.AbstractList.clear(AbstractList.java:466)
12-27 09:37:57.376: E/AndroidRuntime(1423):     at android.widget.ArrayAdapter.clear(ArrayAdapter.java:258)

何か案が ?

読んでくれてありがとう。

4

3 に答える 3

8

配列の代わりに独自のリストをアダプターに渡します。アダプターArrays.asListはメソッドを使用して配列をリストに変換しますが、このメソッドによって返されるリストは削除をサポートしていません。ArrayList配列から のインスタンスを作成し、それをアダプターに渡すことができます。

List<String> values = new ArrayList<String>(Arrays.asList(categoriesArray));
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, values);

ただし、@PrafulBhatnagar で言及されている非常によく似た質問を確認することをお勧めします: ListView で ArrayAdapter を変更できません: UnsupportedOperationException

于 2012-12-27T09:57:07.013 に答える
3

データ・セットを変更するだけの場合は、アダプターを再初期化する必要はありません。次のコードを試してください -

adapter.clear();
adapter.addAll(categoriesArray);
于 2014-07-24T10:47:15.393 に答える