我正在将commonsguy / cwac-endless EndlessAdapter 集成到我的一个应用程序中,效果非常好!感谢 CommonsWare 先生 :)
但我越来越java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notification
。
注意: 此异常仅在我使用时发生endlessAdapter.setRunInBackground(false);
,基本上是当我希望自己的实现AsyncTask
来缓存数据时(在EndlessAdapter 类AsyncTask
的方法中执行)。cacheInBackground()
重新创建此 IllegalStateException 的步骤:
步骤 1) 运行作为演示提供的EndlessAdapterCustomTaskFragment
示例EndlessAdapter
步骤 2) 向下滚动 ListView,以便看到进度视图。
步骤 3) 单击进度视图。现在,一旦在加载数据时单击进度视图,应用程序将被强制关闭java.lang.IllegalStateException
。
为了克服这个问题,我重写了以下EndlessAdapter
类方法,它确实有效;)
@Override
public boolean areAllItemsEnabled() {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean isEnabled(int position) {
// TODO Auto-generated method stub
return getItem(position) != null;
}
我很想知道以下内容:
1)为什么EndlessAdapter
只有当我想要我自己的实现AsyncTask
来缓存数据时,实现才会抛出异常,即endlessAdapter.setRunInBackground(false);
在endlessAdapter.setRunInBackground(true);
没有自定义实现的情况下使用AsyncTask
ListView
2)点击item和getCount()
method有一定的关系,ListView
因为它只有在点击ListView的进度条时才会产生Exception。
提前致谢 :)