2015-09-06 113 views
8

我有一个recyclerView充满CardViews有2 paramteres(他们都是字符串),其中之一是一个标题,我想有一个按钮来按字母顺序排序他们基于tittle。如何对Android RecyclerView上的字符串进行排序?

,因为它没有太多的元素,我决定使用排序插入它是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")); 

    } 

我认为我需要以某种方式,首先paramater传递给一个字符串数组,然后排序。

这个想法是在显示RecyclerView的同一Activity中的按钮中存在排序方法,并且在按下它时必须对它们进行排序而不必去另一个Activity。

我有点不知所措。

简而言之,我想要做的是有一个按照字母顺序排列基于“标题”参数的RecyclerView的元素(在本例中是CardViews)的按钮。

我的想法是否正确,您是否有其他方式来做到这一点,或者我应该怎么做才能做到这一点?

非常感谢。

回答

21

到一个列表排序,最简单的方法是使用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)。

+1

你的代码对我来说工作完美,但我应该在哪里应用我的代码中的'notifyDataSetChanged()'? –

+0

我在排序后应用'adapter.notifyDataSetChanged()'解决了这个问题。谢谢:) –

+0

@SamarthKejriwal啊是的,我没有精确的方法来源。我从该方法所属的类中添加;) – xiaomi

相关问题