From b0474e51cc91a51cc61b22af2746d341ce54617d Mon Sep 17 00:00:00 2001 From: mgodf Date: Wed, 17 Jun 2020 19:50:03 +0200 Subject: [PATCH 1/5] Setting row & column positions as UNSELECTED_POSITION from SelectionHandler.unselectedCellView() --- .../com/evrencoskun/tableview/handler/SelectionHandler.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tableview/src/main/java/com/evrencoskun/tableview/handler/SelectionHandler.java b/tableview/src/main/java/com/evrencoskun/tableview/handler/SelectionHandler.java index 7ab574ff..49adbe42 100644 --- a/tableview/src/main/java/com/evrencoskun/tableview/handler/SelectionHandler.java +++ b/tableview/src/main/java/com/evrencoskun/tableview/handler/SelectionHandler.java @@ -203,6 +203,10 @@ private void unselectedCellView() { AbstractViewHolder rowHeader = (AbstractViewHolder) mRowHeaderRecyclerView .findViewHolderForAdapterPosition(mSelectedRowPosition); + // Clear selected row and column + mSelectedRowPosition = UNSELECTED_POSITION; + mSelectedColumnPosition = UNSELECTED_POSITION; + // If view is null, that means the row view holder was already recycled. if (rowHeader != null) { // Change color From 797b8a86c5c7072fe80c0d77c444256389487504 Mon Sep 17 00:00:00 2001 From: mgodf Date: Sat, 1 Aug 2020 14:15:45 +0200 Subject: [PATCH 2/5] isAnyCellSelected() added to SelectionHandler --- .../com/evrencoskun/tableview/handler/SelectionHandler.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tableview/src/main/java/com/evrencoskun/tableview/handler/SelectionHandler.java b/tableview/src/main/java/com/evrencoskun/tableview/handler/SelectionHandler.java index 49adbe42..9a8a3948 100644 --- a/tableview/src/main/java/com/evrencoskun/tableview/handler/SelectionHandler.java +++ b/tableview/src/main/java/com/evrencoskun/tableview/handler/SelectionHandler.java @@ -242,6 +242,11 @@ private void unselectedColumnHeader() { mTableView.getUnSelectedColor()); } + public boolean isAnyCellSelected() { + return (getSelectedColumnPosition() != SelectionHandler.UNSELECTED_POSITION && + getSelectedRowPosition() != SelectionHandler.UNSELECTED_POSITION); + } + public boolean isCellSelected(int column, int row) { return (getSelectedColumnPosition() == column && getSelectedRowPosition() == row) || isColumnSelected(column) || isRowSelected(row); From 189415b492b5de2883e50a41b9cf12861e57fe5a Mon Sep 17 00:00:00 2001 From: mgodf Date: Sat, 15 Aug 2020 13:28:01 +0200 Subject: [PATCH 3/5] Keep track of when CellViewHolder is recycled --- .../java/com/evrencoskun/tableview/adapter/ITableAdapter.java | 2 ++ .../adapter/recyclerview/CellRowRecyclerViewAdapter.java | 1 + 2 files changed, 3 insertions(+) diff --git a/tableview/src/main/java/com/evrencoskun/tableview/adapter/ITableAdapter.java b/tableview/src/main/java/com/evrencoskun/tableview/adapter/ITableAdapter.java index 6e414d3a..c5c50908 100644 --- a/tableview/src/main/java/com/evrencoskun/tableview/adapter/ITableAdapter.java +++ b/tableview/src/main/java/com/evrencoskun/tableview/adapter/ITableAdapter.java @@ -45,6 +45,8 @@ public interface ITableAdapter { void onBindCellViewHolder(@NonNull AbstractViewHolder holder, @Nullable C cellItemModel, int columnPosition, int rowPosition); + void onRecycleCellViewHolder(@NonNull AbstractViewHolder holder); + @NonNull AbstractViewHolder onCreateColumnHeaderViewHolder(@NonNull ViewGroup parent, int viewType); diff --git a/tableview/src/main/java/com/evrencoskun/tableview/adapter/recyclerview/CellRowRecyclerViewAdapter.java b/tableview/src/main/java/com/evrencoskun/tableview/adapter/recyclerview/CellRowRecyclerViewAdapter.java index de41e706..bad7155c 100644 --- a/tableview/src/main/java/com/evrencoskun/tableview/adapter/recyclerview/CellRowRecyclerViewAdapter.java +++ b/tableview/src/main/java/com/evrencoskun/tableview/adapter/recyclerview/CellRowRecyclerViewAdapter.java @@ -99,6 +99,7 @@ public boolean onFailedToRecycleView(@NonNull AbstractViewHolder holder) { @Override public void onViewRecycled(@NonNull AbstractViewHolder holder) { super.onViewRecycled(holder); + mTableAdapter.onRecycleCellViewHolder(holder); holder.onViewRecycled(); } } From 607a027fe4c869766f4b9a91b7c7967a7a22bb82 Mon Sep 17 00:00:00 2001 From: mgodf Date: Sat, 15 Aug 2020 13:29:21 +0200 Subject: [PATCH 4/5] Only unselect viewholders when anything is selected --- .../evrencoskun/tableview/handler/SelectionHandler.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/tableview/src/main/java/com/evrencoskun/tableview/handler/SelectionHandler.java b/tableview/src/main/java/com/evrencoskun/tableview/handler/SelectionHandler.java index 9a8a3948..c6cbbe20 100644 --- a/tableview/src/main/java/com/evrencoskun/tableview/handler/SelectionHandler.java +++ b/tableview/src/main/java/com/evrencoskun/tableview/handler/SelectionHandler.java @@ -415,9 +415,11 @@ public void changeSelectionOfRecyclerView(CellRecyclerView recyclerView, @NonNul } public void clearSelection() { - unselectedRowHeader(); - unselectedCellView(); - unselectedColumnHeader(); + if(isAnyCellSelected()){ + unselectedRowHeader(); + unselectedCellView(); + unselectedColumnHeader(); + } } public void setSelectedRowPosition(int row) { From cf83c01d6ea25938757a434a43c2e51ae91928df Mon Sep 17 00:00:00 2001 From: mgodf Date: Sat, 5 Sep 2020 12:27:49 +0200 Subject: [PATCH 5/5] Okay to bail out if this null check fails --- .../tableview/handler/SelectionHandler.java | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/tableview/src/main/java/com/evrencoskun/tableview/handler/SelectionHandler.java b/tableview/src/main/java/com/evrencoskun/tableview/handler/SelectionHandler.java index c6cbbe20..9b50dab1 100644 --- a/tableview/src/main/java/com/evrencoskun/tableview/handler/SelectionHandler.java +++ b/tableview/src/main/java/com/evrencoskun/tableview/handler/SelectionHandler.java @@ -351,15 +351,17 @@ private void changeVisibleCellViewsBackgroundForColumn(int column, boolean isSel CellRecyclerView cellRowRecyclerView = (CellRecyclerView) mCellLayoutManager .findViewByPosition(i); - AbstractViewHolder holder = (AbstractViewHolder) cellRowRecyclerView - .findViewHolderForAdapterPosition(column); + if(cellRowRecyclerView!= null){ + AbstractViewHolder holder = (AbstractViewHolder) cellRowRecyclerView + .findViewHolderForAdapterPosition(column); - if (holder != null) { - // Get each view container of the cell view and set unselected color. - holder.setBackgroundColor(backgroundColor); + if (holder != null) { + // Get each view container of the cell view and set unselected color. + holder.setBackgroundColor(backgroundColor); - // Change selection status of the view holder - holder.setSelected(selectionState); + // Change selection status of the view holder + holder.setSelected(selectionState); + } } } }