我有一个ArrayList
的9个整数值。我想根据值的升序对此ArrayList
进行排序。每次迭代后,我想在ListView
中显示列表。在下一次迭代之后,ListView
应该使用新迭代的结果进行更新。
我使用下面的代码进行排序。但我不知道如何在每次迭代时刷新ListView
。
Integer[] numbers = new Integer[] {9,8,7,6,5,4,3,2,1};
ArrayList<Integer> numberList = new ArrayList<Integer>();
numberList.addAll( Arrays.asList(numbers) );
List list = numberList;
//Method for sorting list
doSort(numberList);
// Create ArrayAdapter using the number list.
listAdapter = new ArrayAdapter<Integer>(this, R.layout.listdata, numberList);
// Set the ArrayAdapter as the ListView's adapter.
mainListView.setAdapter( listAdapter );
}
public static void swap(List<Integer> sort, int i, int j) {
int tmp = sort.get(i);
sort.set(i, sort.get(j));
sort.set(j, tmp);
}
public static void doSort(List<Integer> sort) {
int min;
for (int i = 0; i < sort.size(); ++i) {
//find minimum in the rest of array
min = i;
for (int j = i + 1; j < sort.size(); ++j) {
if (sort.get(j) < sort.get(min)) {
min = j;
}
}
//do swap
swap(sort, i, min);
}
}
答案 0 :(得分:0)
按此列出您的列表
public void sort(ArrayList<Integer> sort){
Collections.sort(sort, new Comparator<Integer >() {
@Override
public int compare(Integer o1, Integer o2) {
return (o1<o2 ? -1 : (o1==o2 ? 0 : 1));
}
});
}
然后只需调用列表适配器
adapter.notifyDatasetChanged();
sort方法将按升序排序,将其更改为Descending
只需将o1<o2
更改为o1>o2
答案 1 :(得分:0)
在后台线程上调用排序方法。然后在每次迭代时,在UI /主线程中通知适配器列表视图。
mainListView.setAdapter( listAdapter ); // <----- this line before sorting.
new Thread(new Runnable() {
@Override
public void run() {
doSort(numberList);
}
}).start();
更新列表视图:
swap(sort, i, min);
runOnUiThread(new Runnable() {
@Override
public void run() {
adapter.notifyDatasetChanged();
}
});