Skip to content

Commit 543ccea

Browse files
author
Cedric Ferry
committed
Merge branch 'master' into feature/multiSelectionSupport
2 parents de59225 + cf1166f commit 543ccea

File tree

3 files changed

+63
-5
lines changed

3 files changed

+63
-5
lines changed

tableview/src/main/java/com/evrencoskun/tableview/handler/ColumnSortHandler.java

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,13 @@
1818
package com.evrencoskun.tableview.handler;
1919

2020
import android.support.v7.util.DiffUtil;
21+
import android.util.Log;
2122

2223
import com.evrencoskun.tableview.ITableView;
2324
import com.evrencoskun.tableview.adapter.recyclerview.CellRecyclerViewAdapter;
2425
import com.evrencoskun.tableview.adapter.recyclerview.ColumnHeaderRecyclerViewAdapter;
2526
import com.evrencoskun.tableview.adapter.recyclerview.RowHeaderRecyclerViewAdapter;
27+
import com.evrencoskun.tableview.sort.ColumnForRowHeaderSortComparator;
2628
import com.evrencoskun.tableview.sort.ColumnSortCallback;
2729
import com.evrencoskun.tableview.sort.ColumnSortComparator;
2830
import com.evrencoskun.tableview.sort.ISortableModel;
@@ -32,6 +34,7 @@
3234

3335
import java.util.ArrayList;
3436
import java.util.Collections;
37+
import java.util.Comparator;
3538
import java.util.List;
3639

3740
/**
@@ -75,18 +78,31 @@ public void sortByRowHeader(final SortState sortState) {
7578
public void sort(int column, SortState sortState) {
7679
List<List<ISortableModel>> originalList = mCellRecyclerViewAdapter.getItems();
7780
List<List<ISortableModel>> sortedList = new ArrayList<>(originalList);
78-
81+
List<ISortableModel> originalRowHeaderList
82+
= mRowHeaderRecyclerViewAdapter.getItems();
83+
List<ISortableModel> sortedRowHeaderList
84+
= new ArrayList<>(originalRowHeaderList);
7985

8086
if (sortState != SortState.UNSORTED) {
8187
// Do descending / ascending sort
8288
Collections.sort(sortedList, new ColumnSortComparator(column, sortState));
89+
90+
// Sorting RowHeader using the same logic has sorting DataSet
91+
ColumnForRowHeaderSortComparator columnForRowHeaderSortComparator
92+
= new ColumnForRowHeaderSortComparator(
93+
originalRowHeaderList,
94+
originalList,
95+
column,
96+
sortState);
97+
98+
Collections.sort(sortedRowHeaderList, columnForRowHeaderSortComparator);
8399
}
84100

85101
// Update sorting list of column headers
86102
mColumnHeaderRecyclerViewAdapter.getColumnSortHelper().setSortingStatus(column, sortState);
87103

88104
// Set sorted data list
89-
swapItems(originalList, sortedList, column);
105+
swapItems(originalList, sortedList, column, sortedRowHeaderList);
90106
}
91107

92108
private void swapItems(List<ISortableModel> oldItems, List<ISortableModel> newItems) {
@@ -104,7 +120,7 @@ private void swapItems(List<ISortableModel> oldItems, List<ISortableModel> newIt
104120
}
105121

106122
private void swapItems(List<List<ISortableModel>> oldItems, List<List<ISortableModel>>
107-
newItems, int column) {
123+
newItems, int column, List<ISortableModel> newRowHeader) {
108124

109125
// Find the differences between old cell items and new items.
110126
final ColumnSortCallback diffCallback = new ColumnSortCallback(oldItems, newItems, column);
@@ -113,6 +129,7 @@ private void swapItems(List<List<ISortableModel>> oldItems, List<List<ISortableM
113129

114130
// Set new items without calling notifyCellDataSetChanged method of CellRecyclerViewAdapter
115131
mCellRecyclerViewAdapter.setItems(newItems, false);
132+
mRowHeaderRecyclerViewAdapter.setItems(newRowHeader, false);
116133

117134
diffResult.dispatchUpdatesTo(mCellRecyclerViewAdapter);
118135
diffResult.dispatchUpdatesTo(mRowHeaderRecyclerViewAdapter);
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package com.evrencoskun.tableview.sort;
2+
3+
/**
4+
* Created by cedricferry on 7/2/18.
5+
*/
6+
7+
import java.util.Comparator;
8+
import java.util.List;
9+
10+
/**
11+
* In order to keep RowHeader DataSet and Main DataSet aligned
12+
* it is required to sort RowHeader the same.
13+
* So if MainDataSet row 1 moved to position 10, RowHeader 1 move to position 10 too.
14+
* To accomplish that we need to set a comparator that use MainDataSet
15+
* in order to sort RowHeader.
16+
*/
17+
public class ColumnForRowHeaderSortComparator implements Comparator {
18+
19+
private List<ISortableModel> mRowHeaderList;
20+
private List<List<ISortableModel>> mReferenceList;
21+
private int column;
22+
private SortState mRortState;
23+
private ColumnSortComparator mColumnSortComparator;
24+
25+
public ColumnForRowHeaderSortComparator(List<ISortableModel> rowHeader, List<List<ISortableModel>> referenceList, int column, SortState sortState) {
26+
this.mRowHeaderList = rowHeader;
27+
this.mReferenceList = referenceList;
28+
this.column = column;
29+
this.mRortState = sortState;
30+
this.mColumnSortComparator = new ColumnSortComparator(column, sortState);
31+
}
32+
33+
@Override
34+
public int compare(Object o, Object t1) {
35+
Object o1 = mReferenceList.get(this.mRowHeaderList.indexOf(o)).get(column).getContent();
36+
Object o2 = mReferenceList.get(this.mRowHeaderList.indexOf(t1)).get(column).getContent();
37+
if (mRortState == SortState.DESCENDING) {
38+
return mColumnSortComparator.compareContent(o2, o1);
39+
} else {
40+
return mColumnSortComparator.compareContent(o1, o2);
41+
}
42+
}
43+
}

tableview/src/main/java/com/evrencoskun/tableview/sort/ColumnSortComparator.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,4 @@ public int compare(List<ISortableModel> t1, List<ISortableModel> t2) {
4747
}
4848
}
4949

50-
51-
5250
}

0 commit comments

Comments
 (0)