2012-01-18 30 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); 
    } 
}); 
相關問題