void DisposeOfConditionalFocusLayout(ConditionalFocusLayout layout) { var renderedView = layout?.GetChildAt(0); var element = (renderedView as INativeElementView)?.Element; var view = (element as ViewCell)?.View; if (view != null) { var renderer = AppCompat.Platform.GetRenderer(view); if (renderer == renderedView) { element.ClearValue(AppCompat.Platform.RendererProperty); } renderer?.Dispose(); renderer = null; } renderedView?.Dispose(); renderedView = null; }
public override AView GetView(int position, AView convertView, ViewGroup parent) { bool isHeader, nextIsHeader; Cell item = GetCellForPosition(position, out isHeader, out nextIsHeader); if (item == null) { return(new AView(Context)); } var makeBline = true; var layout = convertView as ConditionalFocusLayout; if (layout != null) { makeBline = false; convertView = layout.GetChildAt(0); } else { layout = new ConditionalFocusLayout(Context) { Orientation = Orientation.Vertical } }; AView aview = CellFactory.GetCell(item, convertView, parent, Context, _view); if (!makeBline) { if (convertView != aview) { layout.RemoveViewAt(0); layout.AddView(aview, 0); } } else { layout.AddView(aview, 0); } AView bline; if (makeBline) { bline = new AView(Context) { LayoutParameters = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MatchParent, 1) }; layout.AddView(bline); } else { bline = layout.GetChildAt(1); } if (isHeader) { bline.SetBackgroundColor(Color.Accent.ToAndroid()); } else if (nextIsHeader) { bline.SetBackgroundColor(global::Android.Graphics.Color.Transparent); } else { using (var value = new TypedValue()) { int id = global::Android.Resource.Drawable.DividerHorizontalDark; if (Context.Theme.ResolveAttribute(global::Android.Resource.Attribute.ListDivider, value, true)) { id = value.ResourceId; } else if (Context.Theme.ResolveAttribute(global::Android.Resource.Attribute.Divider, value, true)) { id = value.ResourceId; } bline.SetBackgroundResource(id); } } layout.ApplyTouchListenersToSpecialCells(item); if (_restoreFocus == item) { if (!aview.HasFocus) { aview.RequestFocus(); } _restoreFocus = null; } else if (aview.HasFocus) { aview.ClearFocus(); } return(layout); }