2

他の多くの人と同じように、ListViewを使用するとIllegalStateExceptionが発生します:(

java.lang.IllegalStateException:アダプターの内容は変更されましたが、ListViewは通知を受信しませんでした。アダプタのコンテンツがバックグラウンドスレッドからではなく、UIスレッドからのみ変更されていることを確認してください

私は基本的な説明を知っています-私はおそらくバックグラウンドスレッドからリストを変更しようとしています。コードを何度も調べた後、実際にそれを行っている場所を見つけることができません。私はリストに要素を追加/削除していません-それは静的であり、作成から変更されません。私がしているのは、ワーカースレッドからリストの要素の内部データを変更することだけですが、それが実際に私の問題であるかどうかはわかりません。だから-これは私の質問です-私が要素を追加/削除することによってリスト自体を変更しない限り、バックグラウンドスレッドからリスト要素の下のデータを変更することは許可されていますか?

更新: あなたが正しいと思うので、ここに擬似コードがあります:

//from main GUI thread.
ArrayList<People> namesList = // create and populate the list...
//lets assume that NamesArrayAdapter extends ArrayAdapter<People>
NamesArrayAdapter adapter = new NamesArrayAdapter(context, listViewResource, namesList); //instantiate the list adapter


//from backgroung thread
namesList.getItem(0).setName("et"); //Modifying existing element inside the list - is this ligal???
4

1 に答える 1

2

I AM doing is only modifying the internal data of the list's elements from a worker thread

設定したものと同じ静的リストAdapterですか?

その後、から変更することはできませんBackground Thread。それらを変更する場合は、必ず電話してくださいnotifyDataSetChanged

于 2012-10-15T19:29:30.290 に答える