2016-03-25 6 views
0

У меня есть категория Arraylist, который передается на ярлык. Метка получает название категории и устанавливает ее.Как отсортировать категории Arraylist?

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

Категория Класс:

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

}

Я использовал компаратор, но он говорит Cannot resolve symbol sort. Как сортировать категории по имени?

+1

Вы можете оставить свой класс 'Category', который имеет реализующий компаратор? –

+0

Категории class is different and what, котор я спрашиваю Категория также друг, вы, вы использовали Список не Список ... !! –

+1

Вы хотите отсортировать список по названию города? –

ответ

2

Вы должны создавать пользовательские компаратор

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

и сравнить свои объекты из ArrayList:

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

Вы должны реализовать интерфейс Comparable в своем классе Category и переопределить метод compareTo().

1

Так что ваша проблема здесь-то не знает, что делать с class.you должны создайте категории, но вам нужно написать метод, который говорит, что именно нужно сортировать. Если ваш класс содержит строки, используйте компаратор и сортируйте его в соответствии с начальным символом или любым типом, который вам нравится Аналогично с int и всем. В настоящее время, если вы вызываете сортировку в своем списке, она не знает, что делать с вашим классом.

3

Определите один класс Точно так же,

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

} 

... в где-то еще ..

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

В нем говорится, что 'не может разрешить сортировку символов' –

+0

написать именно то, что я написал в ответ, потому что 'sort' - это статический метод Collections. поэтому, пожалуйста, проверьте правильно. если вы ничего не импортируете, напишите полное имя, как я написал, java.util.Collections.sort ... –

+0

Спасибо. Первый блок кода имеет синтаксическую ошибку. –

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

Я вставил код внутри класса категории, но он не дает сортировать его по имени. Я также вставил его выше класса категории, не используя 'public' и не работал. –

+1

Это отдельный класс, вам не нужно класть его в класс. Если вы хотите что-то вроде этого реализовать интерфейс Comparable. – itpr

Смежные вопросы