私は持っListView
ていますSimpleCursorAdapter
私が得ているエラー:-
java.lang.IllegalStateException: アダプターの内容が変更されましたが、ListView は通知を受け取りませんでした。アダプターのコンテンツがバックグラウンド スレッドからではなく、UI スレッドからのみ変更されていることを確認してください。[ListView(2131361944、class android.widget.ListView) with Adapter(class com.pocketpharmacist.adapter.DrugClassesListAdapter)]
いつ:-
私Fragment
はアダプタでフィルタリングを有効にしました。リストをフィルタリングするために、私は1つを得ましたEditText
。
さて、1)フィルターのテキストを入力し始めると、仮想キーボードが生き返り、リストでフィルタリングを開始します
2)しかし、Keybord を非表示にすると、実際のフィルタリングが有効になります。そして、キーボードが生きている状態でlistItemをクリックすると、上記のエラーが表示されます。これは、データがUIに反映されていないため明らかです
深く掘り下げた後、たとえばリストでABCDEを検索したいことを知りました.EdittextにABCを入力しました.Dを追加するとABCのフィルターが表示され、Eを追加するとフィルターが表示されます. ABCDの場合、Buuut Data は元々バックグラウンドで変更されています。それがエラーの原因です。
しかし、私はこれを解決する方法を理解することができません
notifyDataSetChanged には何の効果もありません。これについて私を助けてください。どんなヒントやアイデアでも機能します
私のコードを聞く
からの方法TextWatcher
public void afterTextChanged(Editable s) {
searchAdapter.getFilter().filter(s.toString());
searchAdapter.notifyDataSetChanged();
drugListView.requestLayout();
}
Logcatは以下の通りです
06-30 18:14:54.299: E/AndroidRuntime(6922): FATAL EXCEPTION: main
06-30 18:14:54.299: E/AndroidRuntime(6922): java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified from a background thread, but only from the UI thread. [in ListView(2131361944, class android.widget.ListView) with Adapter(class com.pocketpharmacist.adapter.DrugClassesListAdapter)]
06-30 18:14:54.299: E/AndroidRuntime(6922): at android.widget.ListView.layoutChildren(ListView.java:1555)
06-30 18:14:54.299: E/AndroidRuntime(6922): at android.widget.AbsListView$CheckForTap.run(AbsListView.java:2840)
06-30 18:14:54.299: E/AndroidRuntime(6922): at android.os.Handler.handleCallback(Handler.java:587)
06-30 18:14:54.299: E/AndroidRuntime(6922): at android.os.Handler.dispatchMessage(Handler.java:92)
06-30 18:14:54.299: E/AndroidRuntime(6922): at android.os.Looper.loop(Looper.java:132)
06-30 18:14:54.299: E/AndroidRuntime(6922): at android.app.ActivityThread.main(ActivityThread.java:4028)
06-30 18:14:54.299: E/AndroidRuntime(6922): at java.lang.reflect.Method.invokeNative(Native Method)
06-30 18:14:54.299: E/AndroidRuntime(6922): at java.lang.reflect.Method.invoke(Method.java:491)
06-30 18:14:54.299: E/AndroidRuntime(6922): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:844)
06-30 18:14:54.299: E/AndroidRuntime(6922): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602)
06-30 18:14:54.299: E/AndroidRuntime(6922): at dalvik.system.NativeStart.main(Native Method)
ありがとうございました