java - 如何在顶部显示特定的回收者 View 项目?

标签 java android arrays android-recyclerview adapter

假设我有一个膳食列表的网络请求,并使用 Recyclerview 实现,现在如果我想在顶部排序/移动特定项目该怎么办......!

<小时/>

餐食: 意大利面食 |类型: 面食 |价格:20$

餐食: 热狗披萨 |类型: 披萨 |价格:10$

餐食: 汉堡 |类型: 快餐 |价格:30$

膳食: 米饭 |类型: 午餐 |价格:18$

餐食: 通心粉和奶酪 |类型: 午餐 |价格:17$

餐食: 芝士汉堡 |类型: 快餐 |价格:8$

<小时/>

例如,我想要的是将具有快餐披萨类型的每个项目显示在列表顶部,然后显示其余部分。 .!?

我在哪里执行这个排序逻辑,是在适配器内部还是在 recyclerview 的 Activity 中?是否有像 moveToTop() 这样的函数的现有方法可以像这样使用:

for(Meals item: dataList){

   if (item.getType.equals("fast food") || item.getType.equals("pizza")){
      item.moveToTop(); 
   }

}

可能吗?

<小时/>

更新2

我发现,在这些情况下,我发现了一个方法,它是recyclerview接口(interface)的特殊参数SortedListAdapterCallback

if (homeData.size() > 0) {

            Collections.sort(homeData, Collections.reverseOrder(new SortedListAdapterCallback<HomeItemModel>(adapter) {
              @Override
              public int compare(HomeItemModel o1, HomeItemModel o2) {

               int weight1;
               int weight2;

               if(item1.getType.equals("fast food") || item1.getType.equals("pizza")){
                   weight1 = 1;
               }else{
                   weight1 = 0;
               }

               if(item2.getType.equals("fast food") || item2.getType.equals("pizza")){
                weight2 = 1;
               }else{
                weight2 = 0;
               }

                if (weight1 == weight2)
                   return 0;
                else if (weight1 > weight2)
                   return 1;
                else
                   return -1;

                 }

              @Override
              public boolean areContentsTheSame(HomeItemModel oldItem, HomeItemModel newItem) {
                return false;
              }

              @Override
              public boolean areItemsTheSame(HomeItemModel item1, HomeItemModel item2) {
                return false;
              }
            }));

          }

这里唯一的问题是顶部的顺序..!它们显示如下:

  • 快餐
  • 披萨
  • 披萨
  • 快餐
  • 披萨
  • 快餐
  • ...列表的其余部分

我希望它们显示有序..像这样:

  • 快餐//或者先吃披萨
  • 快餐
  • 快餐
  • 披萨
  • 披萨
  • 披萨
  • ...列表的其余部分

这可以做到吗..?

最佳答案

在 POJO 类 Meals 中创建一个比较器

public static class CustomComparator implements Comparator<Meals> {
    public int compare(Meals  item1, Meals  item2) {

        int weight1;
        int weight2;

        if(item1.getType.equals("fast food") || item1.getType.equals("pizza")){
            weight1 = 1;
        }else{
            weight1 = 0;
        }

        if(item2.getType.equals("fast food") || item2.getType.equals("pizza")){
            weight2 = 1;
        }else{
            weight2 = 0;
        }


        if (weight1 == weight2)
            return 0;
        else if (weight1 > weight2)
            return 1;
        else
            return -1;
    }
}

在设置适配器之前,请调用此行,然后将数据列表传递到适配器构造函数中。

Collections.sort(yourDataLIst, Collections.reverseOrder(new Meals.CustomComparator()));

编辑 如果您想先吃所有快餐,然后吃披萨,然后再吃所有 list 然后只需调整您的排序逻辑,如下所示

        if(item1.getType.equals("fast food")){
            weight1 = 2;
        }else if (item1.getType.equals("pizza")){
            weight1 = 1;
        } else {
            weight1 = 0;
        }

        if(item2.getType.equals("fast food")){
            weight2 = 2;
        }else if (item2.getType.equals("pizza")){
            weight2 = 1;
        } else{
            weight2 = 0;
        }

关于java - 如何在顶部显示特定的回收者 View 项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46198160/

相关文章:

javascript - 如何在 Javascript 中编写 Pascal 三 Angular 形 - 混淆数组

java - Jersey 2.0 HashMap 与 Json 之间的转换

java - 由于 ORACLE 中的表被锁定,事务失败

java - 应该返回值的方法可以像不返回任何内容(void)的方法一样使用吗?

android - Android-日志中出现IOException错误

javascript - 如何在 JavaScript 中向空数组添加数据使其成为多维数组?

java - Play 2.4 : How to separate concerns with Ebean?

java - 添加对设置屏幕 android 的支持

android - 如何以编程方式禁用预测文本(没有 EditText)

c - 2d-array- arr[][0] 是什么意思?