2012-01-18 95 views
7

我想按产品名称排序ListView的项目。我有一个称为“数据”的向量,它是一类类。使用自定义适配器按产品名称排序ListView?

我的类是:

public static class RowData implements Comparable<RowData>{ 
    public String mProductName; 
    protected int mId; 

    protected int mOnHand; 
    protected double mPrice; 
    protected boolean mIsColleaction; 
    protected boolean mIsPrePack; 

    RowData(int id ,String productName,int onhand,double price,boolean IsColleaction, boolean IsPrePack) { 
     mId= id; 
     mProductName= productName; 
     mOnHand =onhand; 
     mPrice = price; 
     mIsColleaction =IsColleaction; 
     mIsPrePack = IsPrePack; 
    } 

    @Override 
    public String toString() { 
     return mProductName; 
    } 

    public int compareTo(RowData other) { 
     return mProductName.compareTo(other.mProductName); 
    } 

    public static Comparator<RowData> COMPARE_BY_PRODUCTNAME = new Comparator<RowData>() { 
     public int compare(RowData one, RowData other) { 
      return one.mProductName.compareTo(other.mProductName); 
     } 
    }; 
} 

和我已延伸ArrayAdapter<RowData>自定义适配器。

我排序的代码,我写在onCreate()如下,

Collections.sort(data, RowData.COMPARE_BY_PRODUCTNAME); 
adapter = new CustomAdapter(this, R.layout.list,R.id.title, data); 

setListAdapter(adapter); 
adapter.notifyDataSetChanged(); 

我必须使用自定义适配器,因为以显示该产品的价格以及数量在产品的手

该数据是一个类型为RowData的向量我正在调试产品名称的排序顺序后,我想要但绑定到ListView时,它不按排序顺序显示。

我是新来的机器人请帮助我。


感谢亚历克斯·洛克伍德,我使用ArrayAdaptor<Class>类型的自定义适配器。

在我onCreate()方法,我实现排序方法,如下面,

adapter = new CustomAdapter(this, R.layout.list,R.id.title, data); 

adapter.sort(new Comparator<RowData>() { 
    public int compare(RowData arg0, RowData arg1) { 
     return arg0.mProductName.compareTo(arg1.mProductName); 
    } 
}); 

setListAdapter(adapter); 

在我customAdaptor课,我要重写sort这样,

public void sort(Comparator<? super RowData> comparator) { 
    // TODO Auto-generated method stub 
    super.sort(comparator); 
} 

,如果你能帮帮我修改上面的代码或者向我推荐你的代码。

在此先感谢。

+0

请确保您的“CustomAdapter”能够显示正常的数组或ArrayList。当这项工作 - 你应该也能够显示一个排序的数据集。 – 2012-01-18 10:34:49

+0

当您将新适配器设置为列表时,您不需要使用notifyDataSetChanged()方法。 只需粘贴你的适配器代码和活动代码。 – jeet 2012-01-18 10:36:00

+0

感谢杯能否请你给我提供的代码相同或请你使用的代码 – 2012-01-18 12:10:45

回答

18

如果您使用的是ArrayAdapter,则可以在适配器上调用sort并通过Comparator。您如何实施Comparator取决于您。


编辑我:

你不应该需要重写sort ...的ArrayAdapter类实现了你。您只需创建自己的Comparator即可按您希望它们显示的方式对泛型类型对象进行排序。另外,如果在运行时对列表进行排序,则可能需要通知应用程序数据集已更改。如果你使用这种方法,你的代码应该可以正常工作

adapter = new CustomAdapter(this, R.layout.list,R.id.title, data); 

adapter.sort(new Comparator<RowData>() { 
    public int compare(RowData arg0, RowData arg1) { 
     return arg0.mProductName.compareTo(arg1.mProductName); 
    } 
}); 

setListAdapter(adapter); 
adapter.notifyDataSetChanged(); 
+0

汉克斯亚历克斯·洛克伍德请看我下面的查询 – 2012-01-19 07:31:21

+0

感谢“亚历克斯洛克伍德”,现在它的工作)的问题,我有遇到在getView(方法有我能找到我的载体,其排序早些时候现在多数民众赞成在工作感谢您的帮助! – 2012-01-20 09:57:06

+0

PLZ看到[这](http://stackoverflow.com/questions/39952230/sorting-custom-adapter-list-item-in-custom-listview)如何排序列表视图名称 – Manish 2016-10-10 06:26:16

4

如果要排序区分语言环境的字符串,请使用Collator类。在德语中:A,Ä,B

final Collator col = Collator.getInstance(); 
adapter.sort(new Comparator<RowData>() { 
    public int compare(RowData arg0, RowData arg1) { 
     return col.compare(arg0.mProductName, arg1.mProductName); 
    } 
}); 
相关问题