protected override void OnElementChanged(ElementChangedEventArgs <ListView> e) { base.OnElementChanged(e); if (e.OldElement != null) { ((IListViewController)e.OldElement).ScrollToRequested -= OnScrollToRequested; if (_adapter != null) { // Unhook the adapter from the ListView before disposing of it if (Control != null) { Control.Adapter = null; } _adapter.Dispose(); _adapter = null; } } if (e.NewElement != null) { AListView nativeListView = Control; if (nativeListView == null) { var ctx = Context; nativeListView = CreateNativeControl(); _refresh = CreateNativePullToRefresh(ctx); _refresh.SetOnRefreshListener(this); _refresh.AddView(nativeListView, new LayoutParams(LayoutParams.MatchParent, LayoutParams.MatchParent)); SetNativeControl(nativeListView, _refresh); _headerView = new Container(ctx); nativeListView.AddHeaderView(_headerView, null, false); _footerView = new Container(ctx); nativeListView.AddFooterView(_footerView, null, false); } ((IListViewController)e.NewElement).ScrollToRequested += OnScrollToRequested; nativeListView.DividerHeight = 0; nativeListView.Focusable = false; nativeListView.DescendantFocusability = DescendantFocusability.AfterDescendants; nativeListView.OnFocusChangeListener = this; nativeListView.Adapter = _adapter = e.NewElement.IsGroupingEnabled && e.NewElement.OnThisPlatform().IsFastScrollEnabled() ? new GroupedListViewAdapter(Context, nativeListView, e.NewElement) : new ListViewAdapter(Context, nativeListView, e.NewElement); _adapter.HeaderView = _headerView; _adapter.FooterView = _footerView; _adapter.IsAttachedToWindow = _isAttached; UpdateHeader(); UpdateFooter(); UpdateIsSwipeToRefreshEnabled(); UpdateFastScrollEnabled(); UpdateSelectionMode(); UpdateSpinnerColor(); UpdateHorizontalScrollBarVisibility(); UpdateVerticalScrollBarVisibility(); } }
protected override void Dispose(bool disposing) { if (_disposed) { return; } _disposed = true; if (disposing) { Controller.ScrollToRequested -= OnScrollToRequested; if (_headerRenderer != null) { Platform.ClearRenderer(_headerRenderer.View); _headerRenderer.Dispose(); _headerRenderer = null; } _headerView?.Dispose(); _headerView = null; if (_footerRenderer != null) { Platform.ClearRenderer(_footerRenderer.View); _footerRenderer.Dispose(); _footerRenderer = null; } _footerView?.Dispose(); _footerView = null; if (Control != null) { // Unhook the adapter from the ListView before disposing of it Control.Adapter = null; Control.SetOnScrollListener(null); } if (_adapter != null) { _adapter.Dispose(); _adapter = null; } } base.Dispose(disposing); }
protected override void OnElementChanged(ElementChangedEventArgs <ListView> e) { base.OnElementChanged(e); if (e.OldElement != null) { ((IListViewController)e.OldElement).ScrollToRequested -= OnScrollToRequested; if (_adapter != null) { _adapter.Dispose(); _adapter = null; } } if (e.NewElement != null) { AListView nativeListView = Control; if (nativeListView == null) { var ctx = Context; nativeListView = new AListView(ctx); _refresh = new SwipeRefreshLayout(ctx); _refresh.SetOnRefreshListener(this); _refresh.AddView(nativeListView, LayoutParams.MatchParent); SetNativeControl(nativeListView, _refresh); _headerView = new Container(ctx); nativeListView.AddHeaderView(_headerView, null, false); _footerView = new Container(ctx); nativeListView.AddFooterView(_footerView, null, false); } ((IListViewController)e.NewElement).ScrollToRequested += OnScrollToRequested; nativeListView.DividerHeight = 0; nativeListView.Focusable = false; nativeListView.DescendantFocusability = DescendantFocusability.AfterDescendants; nativeListView.OnFocusChangeListener = this; nativeListView.Adapter = _adapter = new ListViewAdapter(Context, nativeListView, e.NewElement); _adapter.HeaderView = _headerView; _adapter.FooterView = _footerView; _adapter.IsAttachedToWindow = _isAttached; UpdateHeader(); UpdateFooter(); UpdateIsSwipeToRefreshEnabled(); UpdateIsRefreshing(); } }
protected override void Dispose(bool disposing) { if (_disposed) { return; } _disposed = true; if (disposing) { if (_headerRenderer != null) { Platform.ClearRenderer(_headerRenderer.View); _headerRenderer.Dispose(); _headerRenderer = null; } _headerView?.Dispose(); _headerView = null; if (_footerRenderer != null) { Platform.ClearRenderer(_footerRenderer.View); _footerRenderer.Dispose(); _footerRenderer = null; } _footerView?.Dispose(); _footerView = null; if (_adapter != null) { _adapter.Dispose(); _adapter = null; } Controller.ScrollToRequested -= OnScrollToRequested; } base.Dispose(disposing); }
protected override void Dispose(bool disposing) { if (disposing) { if (_headerView == null) { return; } if (_headerRenderer != null) { (_headerRenderer.View as ViewGroup)?.RemoveAllViews(); _headerRenderer.Dispose(); _headerRenderer = null; } if (_footerRenderer != null) { (_footerRenderer.View as ViewGroup)?.RemoveAllViews(); _footerRenderer.Dispose(); _footerRenderer = null; } _headerView.Dispose(); _headerView = null; _footerView.Dispose(); _footerView = null; if (_adapter != null) { _adapter.Dispose(); _adapter = null; } Controller.ScrollToRequested -= OnScrollToRequested; } base.Dispose(disposing); }