如何使用 android 中的变量对游标进行排序?
How to sort a cursor with variables in android?
我有一个 ListView
(在 ListFrament
中)和一个显示不同地名的 CursorAdapter
。
一开始,列表按此名称排序(在我的查询中使用 ORDER_BY)。
现在,由于每个地方的 latitude/longitude 和 LocationManager
.我想按这个距离(从最近到最远)对我的地点列表进行排序。
问题是我计算了 "SQL environment" 之外的距离,没有办法对我的 Cursor
/ListView
/Adapter
...
有什么想法吗?
使用Collections.sort(List, Comparator)
with a custom Comparator
.
使用 class 按两个整数字段之和排序的示例:
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
class A {
final String name;
final int someNumber;
final int someOtherNumber;
A(final String name, final int a, final int b) {
this.name = name;
this.someNumber = a;
this.someOtherNumber = b;
}
@Override
public String toString() {
return this.name;
}
}
class YourComparator implements Comparator<A> {
@Override
public int compare(A o1, A o2) {
final int sumO1 = o1.someNumber + o1.someOtherNumber;
final int sumO2 = o2.someNumber + o2.someOtherNumber;
return (sumO1 - sumO2);
}
}
public class Main {
public static void main(final String args[]) {
final List<A> listOfAs = new ArrayList<A>();
listOfAs.add(new A("Three", 1, 2));
listOfAs.add(new A("Two", 1, 1));
listOfAs.add(new A("Ten", 3, 7));
listOfAs.add(new A("Five", 3, 2));
Collections.sort(listOfAs, new YourComparator());
System.out.println(listOfAs);
}
}
我有一个 ListView
(在 ListFrament
中)和一个显示不同地名的 CursorAdapter
。
一开始,列表按此名称排序(在我的查询中使用 ORDER_BY)。
现在,由于每个地方的 latitude/longitude 和 LocationManager
.我想按这个距离(从最近到最远)对我的地点列表进行排序。
问题是我计算了 "SQL environment" 之外的距离,没有办法对我的 Cursor
/ListView
/Adapter
...
有什么想法吗?
使用Collections.sort(List, Comparator)
with a custom Comparator
.
使用 class 按两个整数字段之和排序的示例:
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
class A {
final String name;
final int someNumber;
final int someOtherNumber;
A(final String name, final int a, final int b) {
this.name = name;
this.someNumber = a;
this.someOtherNumber = b;
}
@Override
public String toString() {
return this.name;
}
}
class YourComparator implements Comparator<A> {
@Override
public int compare(A o1, A o2) {
final int sumO1 = o1.someNumber + o1.someOtherNumber;
final int sumO2 = o2.someNumber + o2.someOtherNumber;
return (sumO1 - sumO2);
}
}
public class Main {
public static void main(final String args[]) {
final List<A> listOfAs = new ArrayList<A>();
listOfAs.add(new A("Three", 1, 2));
listOfAs.add(new A("Two", 1, 1));
listOfAs.add(new A("Ten", 3, 7));
listOfAs.add(new A("Five", 3, 2));
Collections.sort(listOfAs, new YourComparator());
System.out.println(listOfAs);
}
}