Example #1
0
        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);
        }
Example #2
0
        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);
        }