Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 安卓系统-翻版分页_Android_Pagination_Retrofit - Fatal编程技术网

Android 安卓系统-翻版分页

Android 安卓系统-翻版分页,android,pagination,retrofit,Android,Pagination,Retrofit,通过改造,在分页的REST响应中加载“更多”数据的最佳方式是什么 背景 我正在从AsyncTasks+加载程序迁移到改型。与此相关文档中OP的情况不同,我希望仅在请求时更新获取数据,而不是一次下载所有项目。目前,当用户通过调用LoaderManager.restartLoader()滚动到当前列表视图页面的末尾时,很容易做到这一点 我们的客户使用的API的示例响应: { "data": [ { "nid": 4382, "comment_text": "som

通过改造,在分页的REST响应中加载“更多”数据的最佳方式是什么

背景 我正在从AsyncTasks+加载程序迁移到改型。与此相关文档中OP的情况不同,我希望仅在请求时更新获取数据,而不是一次下载所有项目。目前,当用户通过调用
LoaderManager.restartLoader()
滚动到当前列表视图页面的末尾时,很容易做到这一点

我们的客户使用的API的示例响应:

{
  "data": [
    {
      "nid": 4382,
      "comment_text": "some user comment", ...
    }, ...
  ],
  "paging": {
    "nextPage": "http://api.domain.net/v2/comments?page=1&pageSize=20&requestLandmark=M4ewMnwxDUsdadf0NTIwfDU2OA==%3D%3D",
    "itemsTotal": 5164,
    "page": 0,
    "pagerMax": 218,
    "requestLandmark": "M4ewMnwxDUsdadf0NTIwfDU2OA=="
  }
}
我知道我们可以向我们的APIService提供如下“页面”参数:

public interface APIService {
  @GET("/comments/{page}") //
  List<Comment> getComments(@Path("page") int page);
}
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
    ...
    mLoadHandler.handleNewItemLoading(firstVisibleItem, visibleItemCount, totalItemCount);
    ...
}
而mLoaderHandler是一个例子:

/**
 * Handles new content loading for ListView if the list has been scrolled to the end
 */
public class ListLoadMoreHandler {

    private static final int MAX_PAGES_TO_LOAD = 10; 
    private boolean mLoadingContent;
    private int mPageIndex = 0;
    private int mTotalItemCount;
    private final LoaderManager mLoaderManager;
    private final int mLoaderId;
    private final LoaderManager.LoaderCallbacks<?> mCallBack;

    public ListLoadMoreHandler(LoaderManager loaderManager,
                                  int loaderId,
                                  LoaderManager.LoaderCallbacks<?> callback) {
        mLoaderManager = loaderManager;
        mLoaderId = loaderId;
        mCallBack = callback;
    }

    /**
     * Trigger loading of new items when end of list view is reached
     * @param firstVisibleItem first visible item in list view
     * @param visibleItemCount visible items in list view
     * @param totalItemCount total items in list view
     */
    public void handleNewItemLoading(int firstVisibleItem, int visibleItemCount, int totalItemCount) {
        if (totalItemCount == 0 || totalItemCount < RestClient.DEFAULT_PAGINATION_SIZE) {
            return;
        }

        int visibleTrigger = 2;
        if (mPageIndex < MAX_PAGES_TO_LOAD && !mLoadingContent &&
                (totalItemCount - visibleItemCount) <= (firstVisibleItem + visibleTrigger)) {
            Log.d(TAG, "restarting loader");
            mLoadingContent = true;
            mPageIndex++;
            mLoaderManager.restartLoader(mLoaderId, null, mCallBack);
        }
    }
    ...
}
/**
*如果列表已滚动到末尾,则处理ListView的新内容加载
*/
公共类ListLoadMoreHandler{
私有静态最终int MAX_PAGES_TO_LOAD=10;
私有布尔mLoadingContent;
私有int mPageIndex=0;
私有整数mTotalItemCount;
专用最终装载机管理器mLoaderManager;
私有最终整数mLoaderId;
专用最终LoaderManager.LoaderCallbacks McCallback;
公共列表LoadMoreHandler(LoaderManager LoaderManager,
int loaderId,
LoaderManager.LoaderCallbacks(回调){
mLoaderManager=loaderManager;
mLoaderId=loaderId;
mCallBack=回调;
}
/**
*到达列表末尾视图时触发加载新项
*@param firstVisibleItem列表视图中的第一个可见项
*@param visibleItemCount列表视图中的可见项
*@param totalItemCount列表视图中的项目总数
*/
public void handleNewItemLoading(int firstVisibleItem、int visibleItemCount、int totalItemCount){
if(totalItemCount==0 | | totalItemCount(totalItemCount-VisibleTItemCount)改型2引入了一种很好的处理分页的方法。它目前处于测试阶段,但相当稳定。可能值得一看!请参阅本演讲中的16:34及以后的内容:这看起来像是泛型的工作。我将有一个数据类型
容器
,其中包含
列表数据
分页信息
,然后定义
getComments
返回
容器
(因为您的服务不会按原样返回
列表
,除非您添加自定义Gson反序列化器)好主意,@stkent和njzk2。我将合并这两个建议并在此处发布我的解决方案