我将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的数据。 –
不,它不是很大的开销,只是从我的感觉来看问题,也许我们有更优雅的方式。如果不是,我会像现在一样离开它。我的数据没有改变,直到我关闭这个片段 –