Exemplo n.º 1
0
 public virtual SimpleListDialogBuilder SetChoiceMode(AbsListViewChoiceMode choiceMode)
 {
     this.mode = choiceMode;
     return(this);
 }
Exemplo n.º 2
0
        protected override Builder Build(Builder builder)
        {
            string[] items = Items;

            string title = Title;

            if (!TextUtils.IsEmpty(title))
            {
                builder.SetTitle(title);
            }

            if (!TextUtils.IsEmpty(NegativeButtonText))
            {
                builder.SetNegativeButton(NegativeButtonText, (sender, e) =>
                {
                    foreach (ISimpleDialogCancelListener listener in CancelListeners)
                    {
                        listener.OnCancelled(mRequestCode);
                    }
                    Dismiss();
                });
            }

            //confirm button makes no sense when CHOICE_MODE_NONE
            if (Mode != AbsListViewChoiceMode.None)
            {
                string positiveButton = PositiveButtonText;
                if (TextUtils.IsEmpty(PositiveButtonText))
                {
                    //we always need confirm button when CHOICE_MODE_SINGLE or CHOICE_MODE_MULTIPLE
                    positiveButton = GetString(Android.Resource.String.Ok);
                }

                switch (Mode)
                {
                case AbsListViewChoiceMode.Multiple:
                    builder.SetPositiveButton(positiveButton, (sender, e) =>
                    {
                        // prepare multiple results
                        int[] checkedPositions = AsIntArray(CheckedItems);
                        items = Items;
                        string[] checkedValues = new string[checkedPositions.Length];
                        int i = 0;
                        foreach (int checkedPosition in checkedPositions)
                        {
                            if (checkedPosition >= 0 && checkedPosition < items.Length)
                            {
                                checkedValues[i++] = items[checkedPosition];
                            }
                        }

                        foreach (IMultiChoiceListDialogListener listener in MutlipleDialogListeners)
                        {
                            listener.OnListItemsSelected(checkedValues, checkedPositions, mRequestCode);
                        }
                        Dismiss();
                    });
                    break;

                case AbsListViewChoiceMode.Single:
                    builder.SetPositiveButton(positiveButton, (sender, e) =>
                    {
                        // prepare single result
                        int selectedPosition   = -1;
                        int[] checkedPositions = AsIntArray(CheckedItems);
                        items = Items;
                        foreach (int i in checkedPositions)
                        {
                            if (i >= 0 && i < items.Length)
                            {
                                //1st valid value
                                selectedPosition = i;
                                break;
                            }
                        }

                        // either item is selected or dialog is cancelled
                        if (selectedPosition != -1)
                        {
                            foreach (IListDialogListener listener in SingleDialogListeners)
                            {
                                listener.OnListItemSelected(items[selectedPosition], selectedPosition, mRequestCode);
                            }
                        }
                        else
                        {
                            foreach (ISimpleDialogCancelListener listener in CancelListeners)
                            {
                                listener.OnCancelled(mRequestCode);
                            }
                        }
                        Dismiss();
                    });
                    break;
                }
            }

            // prepare list and its item click listener
            items = Items;
            if (items != null && items.Length > 0)
            {
                AbsListViewChoiceMode mode = Mode;
                switch (mode)
                {
                case AbsListViewChoiceMode.Multiple:
                    BuildMultiChoice(builder);
                    break;

                case AbsListViewChoiceMode.Single:
                    BuildSingleChoice(builder);
                    break;

                case AbsListViewChoiceMode.None:
                    BuildNormalChoice(builder);
                    break;
                }
            }

            return(builder);
        }