Cómo creo un cuadro de diálogo en Xamarin Android con Visual Studio?

publicado por: Anonymous

Necesito mostrar una advertencia al presionar un botón que contenga la opción de “aceptar” en el cuadro. La única documentación que he encontrado ha sido para su uso en Android Studio, mostrado a continuación:

public class FireMissilesDialogFragment extends DialogFragment 
{
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        // Use the Builder class for convenient dialog construction
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder.setMessage(R.string.dialog_fire_missiles)
               .setPositiveButton(R.string.fire, new DialogInterface.OnClickListener() {
                   public void onClick(DialogInterface dialog, int id) {
                       // FIRE ZE MISSILES!
                   }
               })
               .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
                   public void onClick(DialogInterface dialog, int id) {
                       // User cancelled the dialog
                   }
               });
        // Create the AlertDialog object and return it
        return builder.create();
    }
}

FUENTE: https://developer.android.com/guide/topics/ui/dialogs.html?hl=es

Quisiera saber cual es la equivalencia en Xamarin usando C# en Visual Studio, ya que intenté implementarlo de esta forma sin éxito.

solución

Buenas,

Si quieres crear un DialogFragment en Xamarin Android (C#) es muy fácil.

Básicamente es casi lo mismo en el lenguaje C#:

    namespace *Your namespace*
    {
        public class CustomDialog : DialogFragment
        {
            public override Dialog OnCreateDialog(Bundle savedInstanceState)
            {
                Bundle args = this.Arguments; 

                return base.OnCreateDialog(savedInstanceState);
            }

            public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
            {
                base.OnCreateView(inflater, container, savedInstanceState);

                var v = inflater.Inflate(Resource.Layout.*Your layout name*, container, false);

                return v;
            }

            public override void OnActivityCreated(Bundle savedInstanceState)
            {

                 // Aqui personalizas la ventana de dialogo como prefieras, te recomiendo buscar referencias en el mismo link que adjuntaste en tu pregunta

                 // Un ejemplo para remover el titulo de la ventana
                //Dialog.Window.RequestFeature(WindowFeatures.NoTitle);

                // Ejemplo para cambiarle el color de fondo en caso de que tu layout no lo tenga
                // Dialog.Window.SetBackgroundDrawableResource(Resource.Color.*Your color*);
                base.OnActivityCreated(savedInstanceState);
            }

        }
    }

Para inicializar el Diálogo desde un Fragmento o Actividad utiliza el siguiente código:

FragmentTransaction ft = this.FragmentManager.BeginTransaction();
// Si no estás en un Activity FragmentTransaction ft = this.Activity.FragmentManager.BeginTransaction();
CustomPopup dfCustomPopup = new CustomPopup();

// Si quieres pasar información en un Bundle al diálogo
//Bundle args = new Bundle();
//Aqui ya manipulas args como quieras
//dfCustomPopup.Arguments = args;
dfCustomPopup.Show(ft, "TITULO DEL DIALOG");

Esto es para crear un custom Dialog, si lo que quieres crear es una alerta, utiliza el siguiente código:

AlertDialog.Builder alert = new AlertDialog.Builder (this);
alert.SetTitle ("Confirm delete");
alert.SetMessage ("Lorem ipsum dolor sit amet, consectetuer adipiscing elit.");
alert.SetPositiveButton ("Delete", (senderAlert, args) => {
    Toast.MakeText(this ,"Deleted!" , ToastLength.Short).Show();
});

alert.SetNegativeButton ("Cancel", (senderAlert, args) => {
    Toast.MakeText(this ,"Cancelled!" , ToastLength.Short).Show();
});

Dialog dialog = alert.Create();
dialog.Show();
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *