2016-03-25 116 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

你可以发表你的 '类别' 类,它具有实现比较? –

+0

分类类是不同的,我问的类别也不同,看你有没有使用名单不是名单 ... !! –

+1

您想按类别名称对列表进行排序吗? –

回答

2

你需要从ArrayList中创建自定义比较

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

,并比较你的对象:

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

您必须在Category类中实现Comparable接口并覆盖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

正是我写的回答,因为'排序'是一个静态方法的集合。所以请检查正确。如果你还没有导入任何东西,那么编写完全限定的名字,就像我写的,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

相关问题