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

Android 如何使用SimpleCursorAdapter将大型数据库值自动加载到listview中,android,listview,simplecursoradapter,Android,Listview,Simplecursoradapter,我有一个应用程序,我使用SimpleCursorAdapter将数据库值加载到listview(多列)中。问题是数据每天都在增加,应用程序显然滞后于一次性加载整个数据到listview 为此,我在谷歌上做了很多工作,找到了很多解决方案(一些使用AsyncTasks,一些使用onscrollistener事件),但我无法使用SimpleCursorAdapter实现这些解决方案 这里的任何指针(特定于SimpleCursorAdapter)都将是一个非常好的选择。可能是一个最简单的可能的代码片段将

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

为此,我在谷歌上做了很多工作,找到了很多解决方案(一些使用
AsyncTasks
,一些使用
onscrollistener
事件),但我无法使用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);
}
使用

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

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

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

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

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


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

那么您实际上是如何进行查询的呢?我已经更新了关于如何使用适配器@ianhanniballake的问题。您还在研究这个问题吗?您想先阅读一篇好的教程吗?您可以一次加载一大块数据。当用户超过listview的底行时,可以加载更多数据。这是我下面的答案。@TheOriginalAndroid是的,我还在研究这个问题,如果有好的教程(针对SimpleCorsorAdapters),请分享链接