2013-04-22 51 views
0

我有這樣的代碼:對於循環中的所有列,GWT,columnSortHandler.setComparator使排序變得混亂?

ListHandler<List<String>> columnSortHandler = new ListHandler<List<String>>(list); 

for (int k=0; k<10; k++){ 
     IndexedColumn myColumn=new IndexedColumn(k+1); 
     table.addColumn(myColumn, "col "+k); 
     myColumn.setSortable(true); 

     columnSortHandler.setComparator(myColumn, new Comparator<List<String>>() { 

      public int compare(List<String> o1,  List<String> o2) { 
       return o1.get(0).compareTo(o2.get(0)); 
      } 

     }); 
} 

當我做了排序,被調用的分揀動作,表做了排序,但在列值的順序是不正確的。所以我懷疑它可能是我把columnSortHandler.setComparator內循環&這是造成這個問題。

我該如何解決?

回答

2

你的問題是,每次你比較你在比較列表中的第一個String。假設列表中的每個對象都表示該索引列的值,那麼您應該更改您獲取比較器的索引。

假設我上面說的是正確的,那麼你可能想看看我發佈here的答案。

在你的情況你比較應該是:

columnSortHandler.setComparator(myColumn, new Comparator<List<String>>(){ 

    public int compare(List<String> o1, List<String> o2) { 

      if (o1 == o2) { 
      return 0; 
      } 

      // Compare the column. 
      if (o1 != null) { 
      return (o2 != null) ? o1.get(k).compareTo(o2.get(k)) : 1; 
      } 
      return -1; 
    } 


}); 

現在我不知道,如果在k上面的代碼應該只是kk+1。看看你發佈的代碼是不是很清楚,如果你的第一列的值是在索引0或1.

+0

嗨恩裏博, Thax你非常非常。它工作完美。你真的很棒。沒有人能回答,但你。 Thax你! – Tom 2013-04-22 14:46:24

+0

它是K + 1,因爲循環從第2列開始。 – Tom 2013-04-22 16:05:09