【问题标题】:java.lang.IllegalStateException in CommonsGuy EndlessAdapterCommonsGuy EndlessAdapter 中的 java.lang.IllegalStateException
【发布时间】:2012-10-26 20:37:47
【问题描述】:

我将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实现来缓存数据时(在cacheInBackground()方法中执行AsyncTask EndlessAdapter 类)。

重新创建此 IllegalStateException 的步骤:

步骤 1) 运行 EndlessAdapterCustomTaskFragment exampleEndlessAdapter 提供的演示版

第 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 的自定义实现时不会抛出异常

2) 点击ListView item 和ListViewgetCount() 方法之间有一定的关系,因为它只有在点击ListView 的进度指示器item 时才会产生Exception。

提前致谢:)

【问题讨论】:

    标签: android android-listview listadapter commonsware-cwac


    【解决方案1】:

    感谢您为此问题提供可重现的测试用例。我对EndlessAdapter 进行了两项更改以尝试解决该问题,包括合并上面列出的areAllItemsEnabled()/isEnabled() 修复的变体。这已提交并标记为 v1.2。如果并且当您迁移到库的 v1.2 时,您将需要删除自己对 areAllItemsEnabled()isEnabled() 的覆盖。

    为什么只有当我希望我自己的 AsyncTask 实现缓存数据时 EndlessAdapter 实现才会抛出异常,即 endlessAdapter.setRunInBackground(false);但不是在使用 neverAdapter.setRunInBackground(true);没有 AsyncTask 的自定义实现

    异常通过onException() 提供给您,您可以覆盖它。这是为了确保您在主应用程序线程上获得异常,即使异常可能是在 EndlessAdapter 管理的后台线程中引起的。

    点击ListView项和ListView的getCount()方法有一定的关系,因为只有在点击ListView的进度条时才会产生异常。

    这是在ListView的实现中。

    【讨论】:

    • 感谢您的回复。我还在您的 EndlessAdapter 实现中发现了另一个错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-11
    • 1970-01-01
    • 1970-01-01
    • 2011-01-07
    • 2021-08-18
    相关资源
    最近更新 更多