2015-09-06 121 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

相關問題