2016-12-27 54 views
1

我正在使用Sortable TableView庫來創建具有排序功能的表結構。圖書館是如下:如何動態排序可排序tableview庫中的列?

https://github.com/ISchwarz23/SortableTableView

我有在我得到頭和表體JSON響應。在表中,我填充頭和體:

String[] myarray = new String[goalData.getTableheaderList().size()]; 

for (int i = 0; i < goalData.getTableheaderList().size(); i++) { 

    myarray[i] = goalData.getTableheaderList().get(i).getName(); 

    if (goalData.getTableheaderList().get(i).isSort()) { 

     int index = GoalsUtils.getIndex(goalData.getTableBodyList().get(0), 
       goalData.getTableheaderList().get(i).getKey()); 

     setColumnComparator(i, TableComparator.getBodyComparator(index)); 

    } 
} 

正如你可以看到我已經使用陣列來顯示標題和正文也顯示在相同的方式不同的代碼。此外,我在循環中使用了Column Comparator來根據數據對列進行排序。這是我的表比較類:

public final class TableComparator { 

private static int headerIndex; 

private TableComparator() { 
    //no instance 
} 

public static Comparator<List<TableBody>> getBodyComparator(int index) { 
    headerIndex = index; 
    return new BodyComparator(); 
} 

private static class BodyComparator implements Comparator<List<TableBody>> { 

    @Override 
    public int compare(final List<TableBody> body1, final List<TableBody> body2) { 
     return body1.get(headerIndex).getValue().compareTo(body2.get(headerIndex).getValue()); 
    } 
} 

}

現在的問題是,我總是得到headerIndex固定在上面的代碼。我的問題是如何動態獲取它。有沒有人知道如何檢測這個庫中的標題點擊,或者我們如何在標題列點擊時獲得不同的headerIndex?任何幫助將不勝感激。

回答

1

我能夠解決我的問題。因此,如果有人需要,我會發布答案。所以我使用headerIndex對列進行排序。在庫中,columnComparator類使用靜態方法進行排序。我實現了動態排序與下面的代碼:

String[] headerArray = new String[headers.size()]; 
    for (int i = 0; i < headers.size(); i++) { 
     int index = GoalsUtils.getIndex(body.get(0), headers.get(i).getKey()); 
     if (headers.get(i).isSort()) { 
      setColumnComparator(i, new TableComparator(index)); 
     } 
    } 

和我TableComparator類,如下所示:

public final class TableComparator implements Comparator<List<TableBody>> { 

private int headerIndex; 

public TableComparator(int index) { 
    headerIndex = index; 
} 

@Override 
public int compare(final List<TableBody> body1, final List<TableBody> body2) { 
    return body1.get(headerIndex).getValue().compareTo(body2.get(headerIndex).getValue()); 
} 

}

編碼愉快!