【问题标题】:Updating List View dynamically with data loaded through LoaderManager使用通过 LoaderManager 加载的数据动态更新列表视图
【发布时间】:2014-07-14 00:27:53
【问题描述】:

在我的应用程序中,我使用 Loader Manager 和 Content Provider 显示从数据库中查询的项目列表。结果附加到 SimpleCursorAdapter,然后显示在列表视图上。我希望能够加载,假设一开始最多 20 个项目,当滚动到该列表的末尾时,再加载 20 个项目。到目前为止,我使用了与此处类似的方法:

How to update listview whose data was queried from database through SimpleCursorAdapter?

即将查询结果限制为 20 并在 OnScrollListener 中适当地增加数量并使用新指令重新启动加载程序。 问题在于这句话:

incomeAdapter.swapCursor(data);

它完全重置适配器的数据,因此列表中只显示第二批项目。有什么方法可以简单地在现有项目之上加载其他项目?谢谢

编辑: 像这样合并游标:

if (incomeAdapter.getCursor() != null){
        Log.v("Income Activity", "current adapter");
        Cursor oldData = incomeAdapter.getCursor();
        MergeCursor merge = new MergeCursor(new Cursor[] {oldData, data});
        incomeAdapter.swapCursor(merge);
    }
    else {
        Log.v("Income Activity", "no current adapter");
        incomeAdapter.swapCursor(data);
    }

抛出异常:

07-13 16:56:15.455: E/AndroidRuntime(5665): FATAL EXCEPTION: main
07-13 16:56:15.455: E/AndroidRuntime(5665): android.database.StaleDataException:     
Attempting to access a closed CursorWindow.Most probable cause: cursor is deactivated
prior to calling this method.  

编辑2: 根据请求,请求数据的代码:

public Loader<Cursor> onCreateLoader(int id, Bundle args) {
    orderBy = sortOrder + " LIMIT " + limitSkip + "," + limitCount;

    CursorLoader cursorLoader = new CursorLoader(this,
        DatabaseProvider.CONTENT_URI1, PROJECTION, null, null, orderBy);

    return cursorLoader;
}

【问题讨论】:

    标签: java android


    【解决方案1】:

    您需要使用之前的光标:incomeAdapter.getCursor() 并将其与新的data 合并。

    MergeCursor 可以帮助您:

    Cursor oldData = incomeAdapter.getCursor();
    MergeCursor merge = new MergeCursor(new Cursor[] {oldData, data});
    incomeAdapter.swapCursor(merge);
    

    编辑

    您正在使用 CursorLoader。您无需重新查询数据库或限制您的查询。当请求特定数据时,加载程序会为您完成所有这些工作。

    Android Docs: Loaders

    【讨论】:

    • 尝试了类似的解决方案(请参阅我编辑的帖子),它会引发 StaleDataException。
    • 好的,当我有 100 多条记录匹配我的查询时会发生什么?它们是否都同时添加到列表中?
    • 您是否设法找出 StaleDataException 背后的原因?我需要做同样的事情,除了这个问题,一切都在正常进行。
    • stackoverflow.com/questions/34828657/… 提出了一个仅与此问题相关的问题。抱歉 2 cmets,但显然 SO 不允许在 5 分钟后进行编辑,ffs。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-31
    • 1970-01-01
    • 1970-01-01
    • 2011-05-11
    相关资源
    最近更新 更多