web-dev-qa-db-ja.com

Android RecyclerViewで文字列を並べ替える方法は?

2つのパラメータ(両方とも文字列)を持つCardViewでいっぱいのrecyclerViewがあり、そのうちの1つはタイトルです。タイトルに基づいて、アルファベット順に並べ替えるボタンが必要です。

要素が多すぎないので、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が表示されているのと同じアクティビティのボタンに並べ替え方法を設定し、押すと別のアクティビティに移動せずに並べ替える必要があります。

私はここでちょっと迷っています。

履歴書で私がやろうとしているのは、「タイトル」パラメータに基づいてRecyclerViewの要素(この場合はCardViews)をアルファベット順に並べるボタンを用意することです。

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

どうもありがとう。

11

リストを並べ替える最も簡単な方法は、_Java.util.Collections_を使用することです。

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

これにより、タイトルが1文字ずつ比較されます。リストをaからzに並べ替えます。

変更後は、データがnotifyDataSetChanged()(_RecyclerView.Adapter_から)で変更されたことをリストに通知することを忘れないでください。

24
xiaomi