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(); } } 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..9b50dab1 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 @@ -238,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); @@ -342,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); + } } } } @@ -406,9 +417,11 @@ public void changeSelectionOfRecyclerView(CellRecyclerView recyclerView, @NonNul } public void clearSelection() { - unselectedRowHeader(); - unselectedCellView(); - unselectedColumnHeader(); + if(isAnyCellSelected()){ + unselectedRowHeader(); + unselectedCellView(); + unselectedColumnHeader(); + } } public void setSelectedRowPosition(int row) {