2016-03-25 41 views
0

我想用Collections.sort方法对类别arraylist进行排序,但没有运气。如何在实现Parcelable时排序ArrayList

这里是我的代码:

public class Categories implements Parcelable { 
    private ArrayList<Category> category; 
    private Recent recent; 

    public ArrayList<Category> getCategories() { 
     return this.category; 
    } 

    public void setCategory(ArrayList<Category> category) { 
     this.category = category; 
    } 

    public Recent getRecent() { 
     return this.recent; 
    } 

    public void setRecent(Recent recent) { 
     this.recent = recent; 
    } 


    protected Categories(Parcel in) { 
     if (in.readByte() == 0x01) { 
      category = new ArrayList<Category>(); 
      in.readList(category, Category.class.getClassLoader()); 
     } else { 
      category = null; 
     } 
     recent = (Recent) in.readValue(Recent.class.getClassLoader()); 
    } 

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

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

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

     @Override 
     public Categories[] newArray(int size) { 
      return new Categories[size]; 
     } 
    }; 
} 
+1

你有没有尝试在你的类别类实现可比较? https://docs.oracle.com/javase/tutorial/collections/interfaces/order.html – RubioRic

+0

@ user2004685我从来没有使用'delegates'。你能帮助我吗? –

+0

@ user2004685我不熟悉Android编程,但为什么不呢?你能链接一些相关的信息吗? – RubioRic

回答

2

您还可以使用自定义的比较:

public class CategoriesComparator implements Comparator<Category> { 
    @Override 
    public int compare(Category category1, Category category2) { 
     return category1.getSomeProperty().compareTo(category2.getSomeProperty()); 
    } 
} 

当你想比较称之为:

Collections.sort(yourListCategories, new CategoriesComparator()); 

希望它能帮助!

+0

我应该在类别类之上粘贴新的自定义类吗? –

+0

不,只是在另一个文件中创建新的类,并且你想对你的数组进行排序的位置'Collections.sort(yourListCategories,new CategoriesComparator());' –

+0

我做了同样的事情,现在它说'无法解析排序符号'。 –

2
Collections.sort(yourListHere,new Comparator<Categories>() { 
      @Override 
      public int compare(Categories lhs, Categories rhs) { 
       //your sort logic here 
       return 0; 
      } 
}); 

希望这有助于。

+0

'无法解析符号排序' –