public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { view = this.View; view = inflater.Inflate(Resource.Layout.MenuFragment, container, false); if (holder == null) { holder = new MenuViewHolder(); } FragmentManager.BeginTransaction().Hide(this).Commit(); SetHolderViews(); AssignClickEvents(); return(view); }
public static View SetupMenuCell(int position, IListItem inVm, View convertView) { var vm = inVm as BaseMenuItemViewModel; var inflater = LayoutInflater.FromContext(Application.Context); MenuViewHolder viewHolder = null; if (convertView == null) { convertView = inflater.Inflate(Resource.Layout.DrawerCell, null, false); convertView.Tag = new MenuViewHolder { Image = convertView.FindViewById <ImageView>(Resource.Id.DrawerCellImage), Title = convertView.FindViewById <TextView>(Resource.Id.DrawerCellText), Subtitle = convertView.FindViewById <TextView>(Resource.Id.DrawerCellFooterText), HolderVm = vm }; viewHolder = convertView.Tag as MenuViewHolder; } else { var oldViewHolder = convertView.Tag as MenuViewHolder; //null check and see if the viewHolder's Vm is the same type as our current vm if (oldViewHolder != null && oldViewHolder.HolderVm.GetType() != vm.GetType()) { //They are different, so lets unbind the previous vm's property changed if (oldViewHolder.PropertyChanger != null) { oldViewHolder.HolderVm.PropertyChanged -= oldViewHolder.PropertyChanger; } //Lets go ahead and remove the on select method if it exists if (oldViewHolder.OnSelect != null) { convertView.Click -= oldViewHolder.OnSelect; } viewHolder = oldViewHolder; viewHolder.HolderVm = vm; } else { return(convertView); } } viewHolder.Image.SetImageResource(DrawableHelpers.GetDrawableResourceIdViaReflection(vm.ImageName)); viewHolder.Title.Text = vm.Title; viewHolder.Subtitle.Text = vm.Subtitle; viewHolder.PropertyChanger = (object sender, System.ComponentModel.PropertyChangedEventArgs e) => { var senderVm = sender as BaseMenuItemViewModel; switch (e.PropertyName) { case "Title": viewHolder.Title.Text = senderVm.Title; break; case "Subtitle": viewHolder.Subtitle.Text = senderVm.Subtitle; break; case "ImageName": viewHolder.Image.SetImageResource( DrawableHelpers.GetDrawableResourceIdViaReflection(senderVm.ImageName)); break; case "UserInteractionEnabled": convertView.Click -= viewHolder.OnSelect; if (vm.UserInteractionEnabled) { convertView.Click += viewHolder.OnSelect; } break; } }; viewHolder.OnSelect = (sender, eventargs) => vm.Selected(); vm.PropertyChanged += viewHolder.PropertyChanger; if (vm.UserInteractionEnabled) { convertView.Click += viewHolder.OnSelect; } convertView.Tag = viewHolder; return(convertView); }