public virtual void SwapItems(IList <IList <ICell> > newItems, int column)
        {
            IList <IList <ICell> > oldItems = mCellRecyclerViewAdapter.GetItems();

            // Set new items without calling notifyCellDataSetChanged method of CellRecyclerViewAdapter
            mCellRecyclerViewAdapter.SetItems((IList <IList <Adapter.ICell> >)newItems, !mEnableAnimation);
            if (mEnableAnimation)
            {
                // Find the differences between old cell items and new items.
                ColumnSortCallback  diffCallback = new ColumnSortCallback(oldItems, newItems, column);
                DiffUtil.DiffResult diffResult   = DiffUtil.CalculateDiff(diffCallback);
                diffResult.DispatchUpdatesTo(mCellRecyclerViewAdapter);
                diffResult.DispatchUpdatesTo(mRowHeaderRecyclerViewAdapter);
            }
        }
        private void SwapItems(IList <IList <ICell> > oldItems, IList <IList <ICell> > newItems, int column,
                               IList <IRowHeader> newRowHeader, SortState sortState)
        {
            // Set new items without calling notifyCellDataSetChanged method of CellRecyclerViewAdapter
            mCellRecyclerViewAdapter.SetItems(newItems, !mEnableAnimation);
            mRowHeaderRecyclerViewAdapter.SetItems(newRowHeader, !mEnableAnimation);
            if (mEnableAnimation)
            {
                // Find the differences between old cell items and new items.
                ColumnSortCallback  diffCallback = new ColumnSortCallback(oldItems, newItems, column);
                DiffUtil.DiffResult diffResult   = DiffUtil.CalculateDiff(diffCallback);
                diffResult.DispatchUpdatesTo(mCellRecyclerViewAdapter);
                diffResult.DispatchUpdatesTo(mRowHeaderRecyclerViewAdapter);
            }

            foreach (ColumnSortStateChangedListener listener in columnSortStateChangedListeners)
            {
                listener.OnColumnSortStatusChanged(column, sortState);
            }
        }