Skip to content

Commit de59225

Browse files
author
Cedric Ferry
committed
re-enabled enableShadow with new SelectionHandler implementation
fixed multi-selection clear when change between cell , row or column selection introduced multiselection in tableview sample
1 parent 3681353 commit de59225

File tree

4 files changed

+44
-20
lines changed

4 files changed

+44
-20
lines changed

app/src/main/java/com/evrencoskun/tableviewsample/MainFragment.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,8 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle
9898
// Create Table view
9999
mTableView = createTableView();
100100
mTableView.setSelectable(true);
101+
mTableView.getSelectionHandler().setShadowEnabled(true);
102+
mTableView.getSelectionHandler().setMultiSelectionEnabled(true);
101103
mTableFilter = new Filter(mTableView); // Create an instance of a Filter and pass the
102104
// created TableView.
103105

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

Lines changed: 40 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,10 @@
2020
import android.util.Log;
2121

2222
import com.evrencoskun.tableview.ITableView;
23-
import com.evrencoskun.tableview.adapter.recyclerview.CellRecyclerView;
2423
import com.evrencoskun.tableview.adapter.recyclerview.holder.AbstractViewHolder;
2524
import com.evrencoskun.tableview.adapter.recyclerview.holder.AbstractViewHolder.SelectionState;
2625
import com.evrencoskun.tableview.sort.ISortableModel;
2726

28-
import java.util.ArrayList;
29-
3027
/**
3128
* Created by evrencoskun on 24/10/2017.
3229
* Refactored by cedricferry on 10/02/2018
@@ -42,7 +39,7 @@ public enum SELECTION_TYPE { NONE, CELLS, ROWS, COLUMNS};
4239

4340
private boolean mMultiSelectionEnabled = false;
4441

45-
private boolean shadowEnabled = true;
42+
private boolean mShadowEnabled = true;
4643

4744

4845
private ITableView mTableView;
@@ -51,6 +48,14 @@ public SelectionHandler(ITableView tableView) {
5148
this.mTableView = tableView;
5249
}
5350

51+
public boolean isShadowEnabled() {
52+
return mShadowEnabled;
53+
}
54+
55+
public void setShadowEnabled(boolean shadowEnabled) {
56+
this.mShadowEnabled = shadowEnabled;
57+
}
58+
5459
/**
5560
* set selected state for one cell at (row, column) coordinates
5661
*
@@ -75,10 +80,10 @@ private void setSelectedCellPositions(int row, int column, boolean notify) {
7580
boolean clean = false;
7681
if(selectionType != SELECTION_TYPE.CELLS && selectionType != SELECTION_TYPE.NONE) {
7782
// unselect everything
78-
clearAllSelection(false);
79-
selectionType = SELECTION_TYPE.CELLS;
83+
clearAllSelection(true);
8084
clean = true;
8185
}
86+
selectionType = SELECTION_TYPE.CELLS;
8287

8388
if(!mMultiSelectionEnabled && !clean) {
8489
// unselect everything first
@@ -92,8 +97,10 @@ private void setSelectedCellPositions(int row, int column, boolean notify) {
9297
setSelectionStateCell(column, row, SelectionState.SELECTED);
9398

9499
// Shadow column and row
95-
setSelectionStateRowHeader(row, SelectionState.SHADOWED);
96-
setSelectionStateColumnHeader(column, SelectionState.SHADOWED);
100+
if(mShadowEnabled) {
101+
setSelectionStateRowHeader(row, SelectionState.SHADOWED);
102+
setSelectionStateColumnHeader(column, SelectionState.SHADOWED);
103+
}
97104
} else {
98105
setSelectionStateCell(column, row, SelectionState.UNSELECTED);
99106

@@ -123,10 +130,10 @@ public void setSelectedRowPosition(int rowPosition) {
123130
boolean clean = false;
124131
if(selectionType != SELECTION_TYPE.ROWS && selectionType != SELECTION_TYPE.NONE) {
125132
// unselect everything
126-
clearAllSelection(false);
127-
selectionType = SELECTION_TYPE.ROWS;
133+
clearAllSelection(true);
128134
clean = true;
129135
}
136+
selectionType = SELECTION_TYPE.ROWS;
130137

131138
if(!mMultiSelectionEnabled && !clean) {
132139
// unselect everything first
@@ -155,8 +162,15 @@ public void setSelectedRowPosition(int rowPosition) {
155162
}
156163

157164

158-
if(shadowEnabled) {
159-
// TODO: Shadow/UnShadow column headers
165+
if(mShadowEnabled) {
166+
// Shadow/UnShadow row headers
167+
for(int columnPosition = 0; columnPosition < mTableView.getAdapter().getColumnHeaderItemCount(); columnPosition++) {
168+
if(getSelectionStateRowHeader(columnPosition) != SelectionState.SHADOWED){
169+
setSelectionStateColumnHeader(columnPosition, SelectionState.SHADOWED);
170+
} else {
171+
setSelectionStateColumnHeader(columnPosition, SelectionState.UNSELECTED);
172+
}
173+
}
160174
}
161175

162176
mTableView.getAdapter().notifyDataSetChanged();
@@ -171,9 +185,10 @@ public void setSelectedColumnPosition(Integer columnPosition) {
171185
boolean clean = false;
172186
if(selectionType != SELECTION_TYPE.COLUMNS && selectionType != SELECTION_TYPE.NONE) {
173187
// unselect everything
174-
selectionType = SELECTION_TYPE.COLUMNS;
175-
clearAllSelection(false);
188+
clearAllSelection(true);
189+
clean = true;
176190
}
191+
selectionType = SELECTION_TYPE.COLUMNS;
177192

178193

179194
if(!mMultiSelectionEnabled && !clean) {
@@ -202,8 +217,15 @@ public void setSelectedColumnPosition(Integer columnPosition) {
202217
}
203218
}
204219

205-
if(shadowEnabled) {
206-
// TODO: Shadow/UnShadow row headers
220+
if(mShadowEnabled) {
221+
// Shadow/UnShadow row headers
222+
for(int rowPosition = 0; rowPosition < mTableView.getAdapter().getRowHeaderItemCount(); rowPosition++) {
223+
if(getSelectionStateRowHeader(rowPosition) != SelectionState.SHADOWED){
224+
setSelectionStateRowHeader(rowPosition, SelectionState.SHADOWED);
225+
} else {
226+
setSelectionStateRowHeader(rowPosition, SelectionState.UNSELECTED);
227+
}
228+
}
207229
}
208230

209231
mTableView.getAdapter().notifyDataSetChanged();
@@ -301,14 +323,14 @@ public boolean rowHasItemSelected(int row) {
301323

302324
public void changeRowBackgroundColorBySelectionStatus(AbstractViewHolder viewHolder,
303325
SelectionState selectionState) {
304-
if(shadowEnabled || (!shadowEnabled && selectionState != SelectionState.SHADOWED)) {
326+
if(mShadowEnabled || (!mShadowEnabled && selectionState != SelectionState.SHADOWED)) {
305327
viewHolder.setBackgroundColor(mTableView.getAdapter().getColorForSelection(selectionState));
306328
}
307329
}
308330

309331
public void changeColumnBackgroundColorBySelectionStatus(AbstractViewHolder viewHolder,
310332
SelectionState selectionState) {
311-
if(shadowEnabled || (!shadowEnabled && selectionState != SelectionState.SHADOWED)) {
333+
if(mShadowEnabled || (!mShadowEnabled && selectionState != SelectionState.SHADOWED)) {
312334
viewHolder.setBackgroundColor(mTableView.getAdapter().getColorForSelection(selectionState));
313335
}
314336
}

tableview/src/main/java/com/evrencoskun/tableview/listener/itemclick/ColumnHeaderRecyclerViewItemClickListener.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ protected boolean clickAction(RecyclerView view, MotionEvent e) {
5050
int column = holder.getAdapterPosition();
5151

5252
// Control to ignore selection color
53-
if (!mTableView.isIgnoreSelectionColors()) {
53+
if (!mTableView.isIgnoreSelectionColors() && mTableView.isSelectable()) {
5454
mSelectionHandler.setSelectedColumnPosition(column);
5555
}
5656

tableview/src/main/java/com/evrencoskun/tableview/listener/itemclick/RowHeaderRecyclerViewItemClickListener.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ protected boolean clickAction(RecyclerView view, MotionEvent e) {
4949
int row = holder.getAdapterPosition();
5050

5151
// Control to ignore selection color
52-
if (!mTableView.isIgnoreSelectionColors()) {
52+
if (!mTableView.isIgnoreSelectionColors() && mTableView.isSelectable()) {
5353
mSelectionHandler.setSelectedRowPosition(row);
5454
}
5555

0 commit comments

Comments
 (0)