我將ListView連接到自定義ArrayAdapter。 也在這個片段上,我有TextView按名稱排序項目。 目前它在下一種風格工作,當我在此TextView中輸入任何文本時我正在更改SQL請求的排序順序,如下所示: 在第一個位置,我顯示包含「已輸入文本」的項目,之後所有其他項目。對列表視圖進行排序的最佳方法
現在我從我的觀點來看,以愚蠢的方式,我每次都從數據庫重新選擇數據,並按某個特定順序字段排序,如果名稱字段包含「輸入的文本」,並且= 0如果不包含。
有人可以告訴我,如果可以對ArrayList進行排序而不重新選擇數據庫中的數據嗎?
這裏是我的解決方案:
if (mActualFilter.equals("")) {
Collections.sort(mProductItems, new Comparator<ProductItem>() {
@Override
public int compare(ProductItem o1, ProductItem o2) {
return o1.getName().compareToIgnoreCase(o2.getName());
}
});
} else {
Collections.sort(mProductItems, new Comparator<ProductItem>() {
@Override
public int compare(ProductItem o1, ProductItem o2) {
String mName1 = o1.getName();
String mName2 = o2.getName();
if ((mName1.toLowerCase().contains(mActualFilter.toLowerCase())) && (!mName2.toLowerCase().contains(mActualFilter.toLowerCase()))) {
return -1;
} else if ((!mName1.toLowerCase().contains(mActualFilter.toLowerCase())) && (mName2.toLowerCase().contains(mActualFilter.toLowerCase()))) {
return 1;
} else {
return 0;
}
}
});
}
的[如何排序在Java中的ArrayList]可能的複製(http://stackoverflow.com/questions/18441846/how-to-sort-an-arraylist-in-java) – Devrim
是否有再大的開銷 - 查詢數據庫?看起來你會增加不必要的複雜性 - 如果在對ArrayList排序後底層數據發生了變化,會發生什麼情況,那麼必須重新查詢,然後重新排序ArrayList的數據。 –
不,它不是很大的開銷,只是從我的感覺來看問題,也許我們有更優雅的方式。如果不是,我會像現在一樣離開它。我的數據沒有改變,直到我關閉這個片段 –