Exemple #1
0
        public virtual void UpdateCanReorderItems()
        {
            var canReorderItems = (ItemsView as ReorderableItemsView)?.CanReorderItems == true;

            if (canReorderItems)
            {
                if (_itemTouchHelperCallback == null)
                {
                    _itemTouchHelperCallback = new SimpleItemTouchHelperCallback();
                }
                if (_itemTouchHelper == null)
                {
                    _itemTouchHelper = new ItemTouchHelper(_itemTouchHelperCallback);
                    _itemTouchHelper.AttachToRecyclerView(this);
                }
                _itemTouchHelperCallback.SetAdapter(ItemsViewAdapter as IItemTouchHelperAdapter);
            }
            else
            {
                if (_itemTouchHelper != null)
                {
                    _itemTouchHelper.AttachToRecyclerView(null);
                    _itemTouchHelper.Dispose();
                    _itemTouchHelper = null;
                }
                if (_itemTouchHelperCallback != null)
                {
                    _itemTouchHelperCallback.Dispose();
                    _itemTouchHelperCallback = null;
                }
            }
        }
Exemple #2
0
        public virtual void TearDownOldElement(TItemsView oldElement)
        {
            // Stop listening for layout property changes
            if (ItemsLayout != null)
            {
                ItemsLayout.PropertyChanged -= LayoutPropertyChanged;
            }

            // Stop listening for ScrollTo requests
            oldElement.ScrollToRequested -= ScrollToRequested;

            RemoveScrollListener();

            if (ItemsViewAdapter != null)
            {
                // Stop watching for empty items or scroll adjustments
                _emptyCollectionObserver.Stop(ItemsViewAdapter);
                _itemsUpdateScrollObserver.Stop(ItemsViewAdapter);

                // Unhook whichever adapter is active
                SetAdapter(null);

                _emptyViewAdapter?.Dispose();
                ItemsViewAdapter?.Dispose();
            }

            if (_snapManager != null)
            {
                _snapManager.Dispose();
                _snapManager = null;
            }

            if (_itemDecoration != null)
            {
                RemoveItemDecoration(_itemDecoration);
            }

            if (_itemTouchHelper != null)
            {
                _itemTouchHelper.AttachToRecyclerView(null);
                _itemTouchHelper.Dispose();
                _itemTouchHelper = null;
            }

            if (_itemTouchHelperCallback != null)
            {
                _itemTouchHelperCallback.Dispose();
                _itemTouchHelperCallback = null;
            }
        }