2016-03-25 18 views
0

Ich habe Kategorien Arraylist, die an Label übergeben wird. Die Bezeichnung erhält den Kategorienamen und legt ihn fest.Wie Kategorien Arraylist zu sortieren?

private List<Category> mCategories; 
private LayoutInflater mInflater; 

public LeftMenuAdapter(Context context, List<Category> categories) { 
    mCategories = categories; 
    mInflater = (LayoutInflater) context 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
} 
Category category = mCategories.get(position - 3); 
holder.label.setText(category.getName()); 

Kategorie Klasse:

public class Category implements Parcelable { 
private List<String> images; 
private String name; 

public List<String> getImages() { 
    return this.images; 
} 

public void setImages(List<String> images) { 
    this.images = images; 
} 

public String getName() { 
    return this.name; 
} 

public void setName(String name) { 
    this.name = name; 
} 

protected Category(Parcel in) { 
    if (in.readByte() == 0x01) { 
     images = new ArrayList<String>(); 
     in.readList(images, String.class.getClassLoader()); 
    } else { 
     images = null; 
    } 
    name = in.readString(); 
} 

@Override 
public int describeContents() { 
    return 2; 
} 

@Override 
public void writeToParcel(Parcel dest, int flags) { 
    if (images == null) { 
     dest.writeByte((byte) (0x00)); 
    } else { 
     dest.writeByte((byte) (0x01)); 
     dest.writeList(images); 
    } 
    dest.writeString(name); 
} 

public static final Parcelable.Creator<Category> CREATOR = new Parcelable.Creator<Category>() { 
    @Override 
    public Category createFromParcel(Parcel in) { 
     return new Category(in); 
    } 

    @Override 
    public Category[] newArray(int size) { 
     return new Category[size]; 
    } 
}; 

}

verwendete ich den Vergleicher aber es sagt Cannot resolve symbol sort. Wie kann ich die Kategorien nach Namen sortieren?

+1

können Sie Ihre 'Kategorie' Klasse schreiben, die Komparator implementiert? –

+0

Kategorien Klasse ist anders und was ich frage Kategorie ist auch anders, wir sehen uns die Liste nicht Liste ... !! –

+1

Sie möchten die Liste nach dem Namen der Kategorie sortieren? –

Antwort

2

Sie müssen benutzerdefinierten Komparator

public class CustomComparator implements Comparator<MyObject> { 
    @Override 
    public int compare(MyObject o1, MyObject o2) { 
     return o1.getStartDate().compareTo(o2.getStartDate()); 
    } 
} 

und vergleichen Sie Ihre Objekte aus Arraylist erstellen: hier

Collections.sort(arrayList, new CustomComparator()); 
2

Sie müssen Comparable Schnittstelle in Ihrer Category Klasse implementieren und überschreiben Sie die compareTo() Methode.

1

So Ihr Problem Art nicht wissen, ist das, was mit class.you zu tun hat, Erstelle Kategorien, aber du musst eine Methode schreiben, die sagt, was genau sortiert werden muss. Wenn Ihre Klasse Zeichenfolgen enthält, verwenden Sie den Vergleicher und sortieren Sie es nach dem Start Char oder welcher Typ Sie möchten Ähnlich mit int und alles. Derzeit, wenn Sie sortieren auf Ihrer Liste, würde es nicht wissen, was Sie mit Ihrer Klasse zu tun haben.

3

definieren Eine Klasse ebenfalls

class SortByNameCategory implements Comparator<Category>{ 

    @Override 
    public int compare(Category c1, Category c2) { 
     return (c1.getName() != null ? c1.getName().compareTo(c2.getName())).compareTo(c2.getName() : 0); 
    } 

} 

... bei woanders ..

List<Category> listofCategory = new ArrayList<Category>(); 
// populate this listofCategory as per your wish... 

    java.util.Collections.sort(listofCategory , new SortByNameCategory()); // this will sort your listofCategory by Category's Name base 
+0

Es sagt 'kann Symbol Sortierung nicht auflösen ' –

+0

schreibe genau, was ich schrieb in Antwort, weil' sort 'ist eine statische Methode der Sammlungen. also bitte, überprüfen Sie richtig. Wenn Sie nichts importieren, dann schreiben Sie voll qualifizierten Namen wie ich schrieb, java.util.Collections.sort ... –

+0

Danke. Der erste Codeblock hat einen Syntaxfehler. –

3
public class CategoryComparator implements Comparator<Category> { 
     @Override 
     public int compare(Category o1, Category o2) { 
      if(o1.getName()!=null && o2.getName()!=null){ 
       return o1.getName().compareToIgnoreCase(o2.getName()); 
      }else{ 
       return 0; 
      } 
     } 
    } 
+0

Ich habe den Code innerhalb der Kategorie-Klasse eingefügt, aber es sortiert nicht nach dem Namen. Ich habe es auch über die Kategorie Klasse eingefügt, ohne 'public' zu verwenden und auch nicht. –

+1

Es ist eine separate Klasse, Sie müssen es nicht in die Kategorie-Klasse einfügen. Wenn Sie so etwas wollen, implementieren Sie die vergleichbare Schnittstelle. – itpr

Verwandte Themen