【问题标题】:When using LoaderManager on Android should I paginate results?在 Android 上使用 LoaderManager 时,我应该对结果进行分页吗?
【发布时间】:2014-12-23 05:04:26
【问题描述】:

假设我在 db 上有 1000 个项目,我想使用 LoaderManager 在 ListView 上显示它们,我应该一次加载所有这些项目吗?或者实现一个分页,例如 50 个项目,然后当用户在最后滚动时获得 50 个以上...

如果分页是正确的方法,我该如何使用 LoaderManager 来实现它?

示例加载器管理器代码:

@Override
public Loader<Cursor> onCreateLoader(int i, Bundle bundle) {
        return new CursorLoader(
                getActivity(),
                DbProvider.URI,
                null,
                null,
                null,
                Table.ID + " desc"
        );

}

@Override
public void onLoadFinished(Loader<Cursor> cursorLoader, Cursor cursor) {
    mAdapter.swapCursor(cursor);
}

@Override
public void onLoaderReset(Loader<Cursor> cursorLoader) {
    mAdapter.swapCursor(null);
}

【问题讨论】:

  • 一千左右应该没问题,你可以跳过分页而不会有任何性能损失
  • @pskink 可以说一百万,如果我必须实现分页,那将是使用 LoaderManager 的方法吗?
  • 你说一百万?然后考虑一个自定义的 AbstractWindowedCursor

标签: android pagination


【解决方案1】:

如果数据太多,分页总是好的。尝试一次加载大量行会减慢屏幕的渲染速度,这绝不会带来良好的用户体验。

要实现钉合,你可以这样做

ListView lv = (ListView)findViewById(R.id.list_view);
lv.setOnScrollListener(new OnScrollListener() {
@Override
public void onScroll(AbsListView view, int firstVisibleItem, 
    int visibleItemCount, int totalItemCount) {
    //Check if the last view is visible
    if (++firstVisibleItem + visibleItemCount > totalItemCount) {
        //LOAD MORE CONTENT HERE...
    }
}
});

【讨论】:

  • 是的,但是在使用 LoaderManager 时如何向 listview/adapter 添加更多项目?例如,当使用Cursor cursor = getContentResolver().query() 时,我可以向适配器添加新项目,然后调用adapter.notifyDataSetChanged() 更新数据。但是它对 LoaderManager 是如何工作的呢?
  • 到目前为止我从未使用过LoaderManager,但据我所知,我认为我提到的代码sn-p应该在onLoadFinished的实现LoaderManager.LoaderCallbacks中使用。我看到你已经有了这个方法,尝试使用我的代码。现在只需放置一个日志,看看列表视图滚动完成时是否显示。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-27
  • 2012-12-21
  • 1970-01-01
  • 2016-11-26
相关资源
最近更新 更多