如何在 Android RecyclerView 上对字符串进行排序?

Posted

技术标签:

【中文标题】如何在 Android RecyclerView 上对字符串进行排序?【英文标题】:How to sort Strings on an Android RecyclerView? 【发布时间】:2015-12-01 20:33:21 【问题描述】:

我有一个充满 CardViews 的 recyclerView,它有 2 个参数(它们都是字符串),其中一个是标题,我想要一个按钮来根据标题按字母顺序对它们进行排序。

因为它没有太多元素,所以我决定使用 o(n^2) 的插入排序,这是我的实现:

public void ISortDes(String[]strings)
     int j;                  
     String key;                
     int i; 

     for (j = 1; j < strings.length; j++)    
    
           key = strings[ j ];


             for(i = j - 1; (i >= 0) ; i--)   

          
                if (key.compareTo(strings[i]) > 0)
                  break;
                
                 strings[ i+1 ] = strings[ i ];
          
         strings[ i+1 ] = key;    
     

        for (int k = 0; k < strings.length; k++)

            System.out.println(strings[k]);


        

             

它需要一个字符串数组并对它们进行排序。

这是我的 RecyclerView 采用参数的方法:

private void initializeData() 
        categories = new ArrayList<>();

          categories.add(new Categories("CARS", "CARS"));
            categories.add(new Categories("SPORTS", "SPORTS"));
            categories.add(new Categories("GAMING", "GAMING"));
            categories.add(new Categories("GAMBLING", "GAMBLING"));
            categories.add(new Categories("TECH", "TECH"));
            categories.add(new Categories("NATURE", "NATURE"));
            categories.add(new Categories("RANDOM", "RANDOM"));
            categories.add(new Categories("COUSINE", "COUSINE"));
            categories.add(new Categories("HISTORY", "HISTORY"));
            categories.add(new Categories("MUSIC", "MUSIC"));
            categories.add(new Categories("STUDIES", "STUDIES"));

    

我认为我需要以某种方式将第一个参数传递给字符串数组,然后对其进行排序。

这个想法是在显示 RecyclerView 的同一个 Activity 中的一个按钮中使用排序方法,当按下它时,它必须对它们进行排序,而无需转到另一个 Activity。

我有点迷路了。

在简历中,我想做的是有一个按钮,根据“title”参数按字母顺序排列 RecyclerView 的元素(在本例中为 CardViews)。

我的想法对吗,你有没有其他方法可以做到这一点,或者我应该怎么做才能做到这一点?

谢谢一百万。

【问题讨论】:

【参考方案1】:

对列表进行排序最简单的方法是使用java.util.Collections

Collections.sort(categories, new Comparator<Categories>() 
            @Override
            public int compare(Categories lhs, Categories rhs) 
                return lhs.title.compareTo(rhs.title);
            
        );

这将逐个字符地比较标题。并将您的列表从 a 到 z 排序。

修改后不要忘记用notifyDataSetChanged()(来自你的RecyclerView.Adapter)通知列表数据发生了变化。

【讨论】:

您的代码非常适合我,但是我应该在哪里应用 notifyDataSetChanged() 在我的代码中? 我在排序后通过应用adapter.notifyDataSetChanged() 解决了这个问题。谢谢:) @SamarthKejriwal 啊,是的,我没有准确说明方法的来源。我添加该方法属于哪个类;) 我将排序的哈希图传递给我的回收器视图适配器,然后为我的适配器调用 setAdapter,但它没有按排序顺序显示项目。我应该在哪里传递 notifydatasetchanged 方法。 我最初没有设置适配器,我是直接传递排序后的hashmap然后设置适配器

以上是关于如何在 Android RecyclerView 上对字符串进行排序?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Android Studio 中禁用 recyclerview 特定数据?

如何在 Android 的 RecyclerView 中显示来自 Firestore 的数据?

如何在 recyclerview 适配器中将动态视图添加到 android 布局

如何在android中排列RecyclerView上的数据?

如何在android的recyclerview中搜索数据

如何在 Android Studio 中同时从 recyclerview 和数据库中删除数据? [关闭]