我有一个共同的问题:

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
这是用果冻做的。
我阅读了HeaderViewListAdapterListAdapterListView的源代码。当IllegalStateException中的项目计数不等于ListView提供的计数时,将引发ListAdapter。在这种情况下,ListAdapter就是HeaderViewListAdapterHeaderViewListAdapters计数是客户端代码传递的原始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

07-26 07:06