【问题标题】:Sorting infinite scrolling list items implemented using Paging library使用 Paging 库对无限滚动列表项进行排序
【发布时间】:2019-02-09 12:46:04
【问题描述】:

假设我已经使用分页库实现了一个无限滚动列表,但是现在我想给用户一个选项来在客户端对数据进行排序,我该怎么做?例如,我有电影数据,分页库可以正常加载所有电影,但是如何根据评分或发布日期对电影进行排序。

任何帮助将不胜感激。

【问题讨论】:

  • 在无限滚动数据中重复。如果您排序,那么相同的数据将连续出现多次
  • 但是,如果数据来自网络,一组 10 个项目,我该如何对数据进行排序,如果我对一批进行排序,当下一批到来时,它将被排序但仅在这 10 个之间,但是我希望当接下来的 10 个项目出现时,所有 20 个项目都会在显示在列表中之前进行排序。我怎样才能做到这一点,甚至可能吗?
  • 嗨@kevin,也许你可以有一个数组来存储你已经拥有的数据并添加刚刚到来的新数据。对这个数组进行排序,清除适配器并给它排序后的数组可能会起作用,但不确定,但这听起来前端处理的工作量太大,而在服务器端可能更容易完成,你可以简单地发送一个关键参数,说明您希望返回的数据按某种方式排序,例如按评级或日期。
  • @FrancislainyCampos 如果他不制作 api 怎么办。如果他使用第三方 api 如何发送参数并整理所有数据
  • 好点@kevin。没有考虑第三方库的想法。谢谢。

标签: android android-recyclerview infinite-scroll android-paging


【解决方案1】:

我还没有尝试过这种方法,但希望它有效。 假设您使用RecyclerView 显示列表(因为在recyclerView 中更容易)

当您从服务器获取前十个项目并选择对其进行排序时。假设按名称(升序)。您必须在这里使用两个 ArrayList: 1:finalArrayList :- 包含所有整个列表 2:updateArrayList :- 最新的十个结果

当你选择排序时(onButtonClick)

      updateArrayList = new ArrayList<>();
        updateArrayList.addAll(finnalArrayList);


 Collections.sort(updateArrayList, new Comparator<StoreModel>() {
      public int compare(StoreModel obj1, StoreModel obj2) {
           // ## Ascending order
           if (sortingBy == 0) {
                     return obj1.getName().compareToIgnoreCase(obj2.getName());
 }});
adapter.clear();
adapter.addAll(updateArrayList);

仅在单击按钮时运行此代码

现在,当您向下滚动并显示更多数据时

 updateArrayList = new ArrayList<>();
 updateArrayList.add(StoreModel)//Add the latest ten data from the response

在发送到适配器之前对其进行排序

 Collections.sort(updateArrayList, new Comparator<StoreModel>() {
      public int compare(StoreModel obj1, StoreModel obj2) {
           // ## Ascending order
           if (sortingBy == 0) {
                     return obj1.getName().compareToIgnoreCase(obj2.getName());
 }});
 adapter.addAll(updateArrayList);

希望你得到它并希望它有效。干杯:)

【讨论】:

  • 嗨@kevin,为了清楚起见,我使用的是android分页库,适配器是PagedListAdapter,我使用submitList()方法将数据设置为适配器,所以你的解决方案不会为我工作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-05
  • 1970-01-01
  • 1970-01-01
  • 2016-12-01
  • 2016-04-02
  • 1970-01-01
  • 2022-12-18
相关资源
最近更新 更多