2012-06-30 23 views
0

SimpleCursorAdapterIllegalStateException異常「適配器的內容發生了變化,但ListView控件沒有收到通知」我有<code>ListView</code>

錯誤我得到: -

java.lang.IllegalStateException:適配器的內容已更改 ,但ListView未收到通知。確保您的適配器的 內容不是從後臺線程修改的,而是僅從修改的UI線程。 [ListView中(2131361944,類 android.widget.ListView)與適配器(類 com.pocketpharmacist.adapter.DrugClassesListAdapter)

當: -

在我Fragment我已經啓用用適配器過濾,並過濾列表我得到了一個EditText

現在, 1)當我開始輸入文字過濾虛擬鍵盤來活着,並開始與列表

2),但過濾,真正的過濾來活着的時候,我隱藏Keybord。如果我點擊的listItem與keybord活着它給我上面的錯誤,這是顯而易見的,因爲數據不會反映到UI

將在深後,我認識了例如我希望在我在EDITTEXT進入ABC列表搜索ABCDE現在,當我加入D它顯示我爲ABC過濾器,現在又如果我添加Ë顯示我的過濾器ABCDBuuut數據最初是在b中更改的ackground。這是錯誤的原因。

但我無法弄清楚如何解決這個

notifyDataSetChangedhas沒有影響,請大家幫我這個,任何提示或想法可以工作

聽到的是我的代碼

方法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) 

謝謝

回答

5

我已經改變了方法進行過濾,而不是寫

public void afterTextChanged(Editable s) { 
    searchAdapter.getFilter().filter(s.toString()); 
    searchAdapter.notifyDataSetChanged(); 
    drugListView.requestLayout();  
} 

我已經改變了它,並開始使用FilterListener ,並呼籲在該方法notifyDataSetChanged,現在一切正常般的魅力

0

適配器是UI的一部分,所以你需要確保這一點,它不是從後臺線程的要求,比它需要從UI線程請求它。請去vogella.com並搜索適配器。本網站教程將正確引導您。

+0

沒有後臺線程在當前片段中 –

相關問題