我有一个应用程序,我使用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);
}
答案 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的底行(位置)时,您必须管理数据。您可以使用getView
或bindView
进行管理。在getView中,用户可能没有意识到您的应用程序从数据库中获取更多数据。如果这很好用,那么只有一个线程正在运行!
如果有任何帮助,CursorAdapter类有方法runQueryOnBackgroundThread
在用户查看数据时执行数据库查询,将运行2个线程。
我希望一切都清楚。
仅供参考:我还没有达到这个问题,但我可能会这样。所以我对您的解决方案以及其他建议感兴趣。