2013-10-22 78 views
0

我有一個類有幾個字段,只是我想顯示在ListView定製ListAdapter不顯示所有字段

class FOO { 
    String f1; 
    String f2; 
    String f3; 
}; 
FOO foo = new FOO; 
FOO [] fooArray = new FOO[5]; 

我使用的是標準的ArrayAdapter顯示此人之一,並加入foo.f1爲要在ListView中顯示的字段。我當然可以對foo.f1進行排序。我現在需要能夠對foo.f2或foo.f3進行排序。我可以構建一個將foo作爲其元素的自定義ArrayAdapter,但只能顯示foo.f1。然後我可以訪問foo.f2和foo.f3,並可以對這些字段進行排序。有沒有更簡單的方法來做到這一點,而不必創建一個自定義的ArrayAdapter?

foo元素數組可以在ArrayAdapter之外使用,我可以對它進行排序,從ArrayAdapter中刪除所有元素,然後以新的排序方式重新添加它們,但是我想使用sort函數的ArrayAdapter。

任何指針都歡迎。

回答

1

ArrayAdapter.sortComparator對象作爲參數。所以你可能有三個不同的比較器或一個參數化的比較器和你想要的分類項目。

Comparator<FOO> f1 = new Comparator<FOO>(){ 
    @Override 
    public int compare(FOO lhs, FOO rhs) {   
     return lhs.f1.compareTo(rhs.f1); 
    } 
}; 

Comparator<FOO> f2 = new Comparator<FOO>(){ 
    @Override 
    public int compare(FOO lhs, FOO rhs) {   
     return lhs.f2.compareTo(rhs.f2); 
    } 
}; 

...
myListAdapter.sort(F1); myListAdapter.sort(f2);

+0

如果ArrayAdapter是一個FOO類型的數組,但是它是一個字符串數組,並且通過循環myListAdapter.add(fooArray [i] .f1)添加到適配器,則這將工作。如果我想讓ArrayAdapter成爲FOO類型的數組,但只想顯示FOO.f1,那麼我不必構建自定義的ArrayAdapter,以便知道如何顯示其項目?我只想顯示FOO.f1,而不管我用於排序的字段。 –

+0

爲什麼不製作FOO的陣列適配器呢?您可以繼承ArrayAdapter,覆蓋getView並僅顯示f1字段。 ArrayAdapter myAdapter =新ArrayAdapter (){... 或者,你可能會離開ArrayAdapter,因爲它是和覆蓋FOO的toString返回F1價值 – Eugene

+0

重寫FOO的toString是要走的最簡單的方法,謝謝您的建議。 –

相關問題