2015-09-06 19 views
8

2つのパラメータ(両方とも文字列)を持つCardViewsのリサイラビューがあります。タイトルの1つですが、タイトルに基づいてアルファベット順にソートするボタンがあります。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が表示されている同じアクティビティのボタンにソート方法を持たせ、別のアクティビティに行かずに並べ替える必要があるということです。

私はここで少し失われています。

私がしようとしているのは、 "タイトル"パラメータに基づいてアルファベット順にRecyclerViewの要素(この場合はCardViews)を注文するbuttomを持つことです。

私の考えは正しいですか、これを行う別の方法がありますか、これを達成するために何をすべきですか?

ありがとうございます。

答えて

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()'を適用して問題を解決しました.Thanks :) –

+0

@SamarthKejriwalはい、私はメソッドの起源が正確ではありませんでした。メソッドが属するクラスを追加します; – xiaomi

関連する問題