2015-09-06 20 views
8

Mam recyclerWidok pełny CardViews, które mają 2 parametry (obie są String), jeden z nich jest tytułem, chciałbym mieć przycisk, aby posortować je alfabetycznie w oparciu o tytuł.Jak sortować ciągi w Android RecyclerView?

ponieważ nie ma zbyt wiele elementów, postanowiłem użyć Sortowanie przez wstawianie co jest O (n^2) i jest to moja realizacja:

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


     } 

      } 

Zajmuje tablicę łańcuchów i nakazuje ściągnięcie .

I to jest metoda moim RecyclerView że trwa parametry:

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

    } 

myślę, że muszę jakoś przekazać, że pierwszy paramater do tablicy ciągów, a następnie posortować je.

Chodzi o to, aby w metodzie sortowania umieścić przycisk w tej samej czynności, w której wyświetlany jest widok RecyclerView, a po naciśnięciu trzeba go posortować bez przechodzenia do innej czynności.

Jestem trochę zagubiony tutaj.

W życiorysie staram się uzyskać buttom, który zamawia elementy (które w tym przypadku to CardViews) urządzenia RecyclerView w kolejności alfabetycznej na podstawie "tytułowego" parametru.

Czy mam rację, czy masz inny sposób, aby to zrobić, lub co powinienem zrobić, aby to osiągnąć?

Dzięki za milion.

Odpowiedz

21

Najprostszym sposobem, aby posortować listę jest wykorzystanie java.util.Collections

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

będzie to porównać tytułową postać po znaku. i posortuje twoją listę od a do z.

Nie zapomnij po modyfikacji, aby powiadomić listę, że dane zmieniły się z notifyDataSetChanged() (z twojego RecyclerView.Adapter).

+1

Twój kod sprawdził się doskonale, ale gdzie mam zastosować 'notifyDataSetChanged()' w moim kodzie? –

+0

Rozwiązałem problem przez zastosowanie 'adapter.notifyDataSetChanged()' po sortowaniu. Dzięki :) –

+0

@SamarthKejriwal Ah tak, nie sprecyzowałem pochodzenia metody. Dodaję, z której klasy należy ta metoda;) – xiaomi

Powiązane problemy