如何使用Litho框架执行分页?

问题描述:

我正在实施一个Retrofit APi,用于从服务器获取数据,并使用Litho框架在RecyclerView中显示,并且它表现良好。由于我们所有人都知道何时我们有无限数据要显示在回收站视图中,因此我们必须实施分页模式。我知道这一点,但我很困惑如何在Litho框架中实现这一点。光刻的提供onScrollListener()方法:如何使用Litho框架执行分页?

final Component component = Recycler.create(context) 
    .binder(recyclerBinder) 
    .onScrollListener(new RecyclerView.OnScrollListener() { 
     @Override 
     public void onScrollStateChanged(RecyclerView recyclerView, int newState) { 
      super.onScrollStateChanged(recyclerView, newState); 
      // 
     } 

     @Override 
     public void onScrolled(RecyclerView recyclerView, int dx, int dy) { 
      super.onScrolled(recyclerView, dx, dy); 
      // 
     }) 
    .build(); 

我不知道:如何在胶印使用自定义EndlessRecyclerViewScrollListener无休止的滚动?

我已经成功实现了“无限”滚动模式,该模式利用的onScrolled方法中的recyclerBinder。一个简单的例子是以下几点:

//Initialize the RecyclerBinder 
recyclerBinder = new RecyclerBinder(c, new LinearLayoutInfo(getContext(), OrientationHelper.VERTICAL, false)); 

//Initialize a recycler component 
Component component = Recycler.create(c) 
       .onScrollListener(new RecyclerView.OnScrollListener() { 
        @Override 
        public void onScrolled(RecyclerView recyclerView, int dx, int dy) { 
         super.onScrolled(recyclerView, dx, dy); 

         // use the recyclerBinder to determine what items at what position are visible - 
         // (you could also use the findLastVisibleItemPosition() method depending on your implementation) 
         int firstVisibleItemPosition = recyclerBinder.findFirstVisibleItemPosition(); 

         //check if it is within range relative to the current available items and is not loading (room to improve/modify logic pending use case) 
         if((recyclerBinder.getItemCount() - 5) <= firstVisibleItemPosition && !isLoading) { 
          //if so - use your service to get the next page 
          service.getNextPage(); 
         } 
        } 
       }) 
       .build(); 

然后在回调方法 - 您可以将您的项目开始处的项目数

public void callback(List<T> results) { 
    int position = recyclerBinder.getItemCount(); 
    for(T result: results) { 
     Component component = //assemble your component(s) ... 
     ComponentInfo.Builder info = ComponentInfo.create().component(component); 
     recyclerBinder.insertItemAt(position, info.build()); 
     position++; 
    } 
} 
+0

谢谢回答,在'onScrolled(RecyclerView recyclerView,INT dx,int dy)'你调用的方法'service.getNextPage();'我不明白,'getNextPage()'是自定义方法吗? –

+0

@HussainKhan - yes - 这是您需要拨打电话以获取下一页数据的位置,也许是对您的翻新服务进行调用,以增加您的API应从中获取的页码。 – syllabix

+0

谢谢,解决了我的问题,很好的回答 –