如何在android的排序过程的每次迭代中动态更新ListView?

时间:2014-08-18 07:48:13

标签: android listview android-listview

我有一个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);

            }

       }

2 个答案:

答案 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();
        }
    });