2015-09-06 12 views
8

Ich habe eine RecyclerView voller CardViews, die 2 Parameter haben (beide sind Strings), einer davon ist ein Titel, ich hätte gerne einen Button, um sie alphabetisch nach dem Titel zu sortieren.Wie sortiere ich Strings in einem Android RecyclerView?

, da es nicht zu viele Elemente hat habe ich beschlossen, die Einführung Art zu verwenden, die o (n^2) und dies ist meine Implementierung ist:

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]); 


     } 

      } 

Es dauert eine Reihe von Strings und befiehlt ihnen, .

Und das ist die Methode meiner RecyclerView, die die Parameter nimmt:

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")); 

    } 

Ich denke, dass ich irgendwie, dass die erste Paramater in einen String Array übergeben müssen und dann sortieren.

Die Idee ist, die Sortiermethode in einer Schaltfläche in derselben Aktivität zu haben, in der die RecyclerView angezeigt wird, und wenn sie gedrückt wird, müsste sie sortiert werden, ohne zu einer anderen Aktivität zu gehen.

Ich bin hier irgendwie verloren.

Im Resümee, was ich versuche zu tun ist, um einen Button zu haben, der die Elemente (die in diesem Fall CardViews sind) eines RecyclerView alphabetisch basierend auf dem "Titel" -Parameter bestellt.

Ist meine Idee richtig, haben Sie einen anderen Weg, dies zu tun, oder was soll ich tun, um dies zu erreichen?

Danke eine Million.

Antwort

21

Der einfachste Weg, um eine Liste zu sortieren ist java.util.Collections

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

Diese verwenden den Titel zeichenweise vergleichen. und sortiert Ihre Liste von a bis z.

Vergessen Sie nach der Änderung nicht, die Liste zu melden, dass sich die Daten mit notifyDataSetChanged() (von Ihrem RecyclerView.Adapter) geändert haben.

+1

Ihr Code funktionierte perfekt für mich, aber wo sollte ich die 'notifyDataSetChanged()' in meinem Code anwenden? –

+0

Ich löste das Problem durch die Anwendung 'adapter.notifyDataSetChanged()' nach meiner Sortierung. Danke :) –

+0

@SamarthKejriwal Ah ja, ich habe den Ursprung der Methode nicht präzisiert. Ich füge hinzu aus welcher Klasse die Methode gehört;) – xiaomi

Verwandte Themen