Nix*_*tel 0 android android-listview android-cursoradapter
我ListView有SimpleCursorAdapter
我得到的错误: -
java.lang.IllegalStateException:适配器的内容已更改,但ListView未收到通知.确保不从后台线程修改适配器的内容,而只是从UI线程修改.[在ListView(2131361944,类android.widget.ListView)中使用Adapter(类com.pocketpharmacist.adapter.DrugClassesListAdapter)]
什么时候:-
在我的Fragment我已启用过滤器与适配器,并过滤列表我有一个EditText.
现在,1)当我开始输入过滤器的文本时,虚拟键盘变为活动状态,并开始使用列表进行过滤
2)但是,当我隐藏Keybord时,真正的过滤活跃起来.如果我点击listItem与keybord alive它会给我上面的错误,这是显而易见的,因为数据没有反映到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();
}
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
谢谢
我已经改变了过滤方法而不是写作方法
public void afterTextChanged(Editable s) {
searchAdapter.getFilter().filter(s.toString());
searchAdapter.notifyDataSetChanged();
drugListView.requestLayout();
}
Run Code Online (Sandbox Code Playgroud)
我已经改变它并开始使用FilterListener
并notifyDataSetChanged在该方法中调用,现在一切都像魅力一样
| 归档时间: |
|
| 查看次数: |
5841 次 |
| 最近记录: |