java - 如何通过 api url 索引使用 recyclerview 实现分页

标签 java android rest android-recyclerview pagination

我知道标题看起来很奇怪,但基本上我想要的是对我的列表应用分页并使用 url api 端点作为参数来控制它。!

因此端点看起来像这样> www.someapi.com/josn/list?pageIndex=1

它将给出包含 10 个项目的数组的响应,如果我想要更多,我必须将参数的索引更改为 2 等等。!

回应

{
    "Succeeded": true,
    "AvailableChallenge": true,
    "DebugError": "",
    "NextPage": 2,
    "AllPages": 2,
    "Challenges": [
        {
            "ID": 114,
            "Title": "Amet sit id ratione dolorem numquam"
        },
        {
            "ID": 114,
            "Title": "Amet sit id ratione dolorem numquam"
        }
        ...
        ..
        .
        ]
 }

我绑定(bind)了所有内容,但无法正确完成,我已经尝试了here中的大部分解决方案并且没有运气。 我也尝试过使用这两个库 Paginate & recyclerview-paginated 甚至这个 SuperRecyclerView 。但没有成功。!

任何有关控制此问题的最佳逻辑的帮助都会有很大帮助。

<小时/>

代码 SuperRecyclerView

public class ChallengesListFragment extends BaseFragment {

  private int pageNumber = 1; 
  private SuperRecyclerView recyclerview;
  private ArrayList<ChallengeActive> data;
  private ChallengesAdapter adapter;

public View onCreateView(LayoutInflater inflater, ViewGroup container,
      Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_challenges_list, container, false);
    initView(rootView);
    initRecycler();
    getData(1);
    return rootView;
  }

 private void initRecycler() {
    data = new ArrayList<>();

    final RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getActivity());
    recyclerview.setLayoutManager(mLayoutManager);
    adapter = new ChallengesAdapter(data, getActivity(), this); 
    recyclerview.setAdapter(adapter);

    recyclerview.setupMoreListener(new OnMoreListener() {
      @Override
      public void onMoreAsked(int overallItemsCount, int itemsBeforeMore, int maxLastVisiblePosition) {

        pageNumber++;
        getData(maxLastVisiblePosition);
      }
    }, 10);

    recyclerview.setRefreshListener(new OnRefreshListener() {
      @Override
      public void onRefresh() {
        pageNumber = 1;
        getData(pageNumber);
      }
    });

  }

  private void getData(final int pageNumber) {

      WebRequests.GetActiveChallenges(pageNumber, new onResult() {
      @Override
      public void onSuccess(Object object) {
        ArrayList<ChallengeActive> list = (ArrayList<ChallengeActive>) object;
        data.clear();
        data.addAll(list);
        adapter.notifyDataSetChanged();  
      }

      @Override
      public void onFail(Object object) {
        Toast.makeText(getActivity(), "Something went wrong, try again later",
            Toast.LENGTH_SHORT).show(); 
      }
    }); 
  } 
}  

最佳答案

这是我在项目中的做法...在本例中,当到达列表底部时我添加更多元素

rv_flohtainer_events.addOnScrollListener(new RecyclerView.OnScrollListener() {
        @Override
        public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
            super.onScrolled(recyclerView, dx, dy);
            if (!rv_flohtainer_events.canScrollVertically(1)){
                if (!(eventsResponse.getCurrent_page() == eventsResponse.getLast_page())) {
                    pageEventsRequest++;
                    makeVendorEventsRequest();
                }
            }
        }
    });

我做的请求是改造,看起来像这样

@GET(RestClient.API_EVENTS_URL)
Call<EventsResponse> getEvents(@Query("page") int page)

关于java - 如何通过 api url 索引使用 recyclerview 实现分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47429347/

相关文章:

java - 如何在 spring-rabbitmq + spring cloud 中手动断开 Channel 与监听器的连接

c# - Xamarin - 自定义渲染器找不到合适的方法来覆盖

java - 在 Java 中的循环和 if 语句中使用变量

java - 有没有办法使 PrintWriter 输出为 UNIX 格式?

android - 如何在 Android 中以编程方式获取设备的经度和纬度?

Android - 在 View 中高效更新计数器

javascript - 如何制作干净的异步循环?

java - 蓝色混合 : Java Rest API starter app

java - 从分页 REST 中获取所有值

java - Hibernate join 没有外键并且只映射一个表