如何使用SimpleCursorAdapter将大型数据库值自动加载到listview中

时间:2015-02-21 05:15:03

标签: android listview simplecursoradapter

我有一个应用程序,我使用SimpleCursorAdapter将数据库值加载到listview(多列)。问题是数据每天都在增加,应用程序明显滞后于将整个数据一次性加载到列表视图中。

我为此做了很多Google,找到了很多解决方案(有些使用AsyncTasks,有些使用OnScrollListener个事件),但我无法使用SimpleCursorAdapter来实现这些

这里的任何指针(特定于SimpleCursorAdapter)都会非常棒。可能是最简单的代码片段将受到高度赞赏

以下是我将数据导入listview的方法,

@Override
public void onResume() {
    cursor = getDBData(sql); // this is causing the lag
    String[] col = new String[] { "col1", "col2", "col3"};

    int[] ids = new int[] { R.id.item_col1, R.id.item_col2, R.id.item_col3};

    cursorAdapter = new SimpleCursorAdapter(this, R.layout.row, cursor, col, ids);

    list.setAdapter(cursorAdapter);
}

2 个答案:

答案 0 :(得分:0)

使用LoaderManger

我设置的方式是在setAdapter()中调用onCreate(),您可以在其中设置适配器。在onResume()中,您可以启动或重新启动加载程序。

if(getLoaderManager().getLoader(SOME_ID) != null)
            getLoaderManager().restartLoader(SOME_ID, null, this);
        else
            getLoaderManager().initLoader(SOME_ID, null, this);

文档将为您提供如何设置加载程序并将其放入适配器的好知识。

答案 1 :(得分:0)

您可以一次将多个数据库数据加载到ListView上。当用户查看数据时,您可以从数据库中获取更多数据。当用户超过ListView的底行(位置)时,您必须管理数据。您可以使用getViewbindView进行管理。在getView中,用户可能没有意识到您的应用程序从数据库中获取更多数据。如果这很好用,那么只有一个线程正在运行!

如果有任何帮助,CursorAdapter类有方法runQueryOnBackgroundThread在用户查看数据时执行数据库查询,将运行2个线程。 我希望一切都清楚。

仅供参考:我还没有达到这个问题,但我可能会这样。所以我对您的解决方案以及其他建议感兴趣。