我有一个共同的问题:
java.lang.IllegalStateException: The content of the adapter has changed but List
View did not receive a notification. Make sure the content of your adapter is no
t modified from a background thread, but only from the UI thread. [in ListView(2
131427573, class android.widget.ListView) with Adapter(class android.widget.Head
erViewListAdapter)]
但适配器不是我的代码,而是在
android.widget.HeaderViewListAdapter
这是用果冻做的。
我阅读了
HeaderViewListAdapter
、ListAdapter
和ListView
的源代码。当IllegalStateException
中的项目计数不等于ListView
提供的计数时,将引发ListAdapter
。在这种情况下,ListAdapter
就是HeaderViewListAdapter
。HeaderViewListAdapter
s计数是客户端代码传递的原始ListAdapter
的计数,加上页眉和页脚的大小。我查了我的密码。对
ListView
的所有访问都是在ui线程上进行的,并且总是紧跟着对适配器的notifyDataSetChanged()
访问。我用的是一个页脚。这在正常使用中不会发生。是因为猴子吗?但是monkey如何从其他线程修改我的变量呢?
更多猴子测试后更新
我删除了对
addFooterView()
的调用,从而删除了页脚。Monkey不再触发异常。我应该在某个时候取消对addFooterView()
的呼叫吗? 最佳答案
您可以尝试在列表视图中添加以下内容:
@Override
protected void layoutChildren() {
try {
super.layoutChildren();
} catch (IllegalStateException e) {
ZLog.e(LOG, "This is not realy dangerous problem");
}
}
如果添加了headerView或footerView列表视图,并且在notifydatasetChanged()时,它会将mitemCount更改为实际适配器的项计数,但右侧将返回已添加headerCount和footerCount的假项计数。
http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.1.1_r1/android/widget/ListView.java?av=f#1538