Xamarin C# - Android - Prevent an AlertDialog from closing on PositiveButton click

I'm new to Xamarin and I don't know how to do the following in c#. I want to prevent an alertdialog from closing when clicking on the Positive/Negative buttons. I need to do some validation on the input first. If the input is correct, the dialog can close, else I will show a message with instructions. Basically, I have the following code:

private void CreateAddProjectDialog() { 
    //some code
    var alert = new AlertDialog.Builder (this);
    alert.SetTitle ("Create new project");
    alert.SetView (layoutProperties);
    alert.SetCancelable (false);
    alert.SetPositiveButton("Create", HandlePositiveButtonClick);
    alert.SetNegativeButton("Cancel", HandelNegativeButtonClick);
}

private void HandlePositiveButtonClick (object sender, EventArgs e) {
    //Do some validation here and return false (prevent closing of dialog) if invalid, else close....
}

Now, I red the following post on StackOverflow: How to prevent a dialog from closing when a button is clicked

I think the code below (taken from the thread) has the solution, but I don't know how to rewrite my c# code to implement the Java:

AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setMessage("Test for preventing dialog close");
builder.setPositiveButton("Test", 
    new DialogInterface.OnClickListener()
    {
        @Override
        public void onClick(DialogInterface dialog, int which)
        {
            //Do nothing here because we override this button later to change the close behaviour. 
            //However, we still need this because on older versions of Android unless we 
            //pass a handler the button doesn't get instantiated
        }
    });
AlertDialog dialog = builder.create();
dialog.show();
//Overriding the handler immediately after show is probably a better approach than     OnShowListener as described below
dialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(new View.OnClickListener()
{

    @Override
    public void onClick(View v)
    {
        Boolean wantToCloseDialog = false;
        //Do stuff, possibly set wantToCloseDialog to true then...
        if(wantToCloseDialog)
                dismiss();
        //else dialog stays open. Make sure you have an obvious way to close the dialog especially if you set cancellable to false.
    }
});

How to code this in c#? Especially the override part in the setPositiveButton area...

Answers


This requires to think a bit outside the box. You will have to manipulate the AlertDialog object directly:

// Build the dialog.
var builder = new AlertDialog.Builder(this);
builder.SetTitle("Click me!");

// Create empty event handlers, we will override them manually instead of letting the builder handling the clicks.
builder.SetPositiveButton("Yes", (EventHandler<DialogClickEventArgs>)null);
builder.SetNegativeButton("No", (EventHandler<DialogClickEventArgs>)null);
var dialog = builder.Create();

// Show the dialog. This is important to do before accessing the buttons.
dialog.Show();

// Get the buttons.
var yesBtn = dialog.GetButton((int)DialogButtonType.Positive);
var noBtn = dialog.GetButton((int)DialogButtonType.Negative);

// Assign our handlers.
yesBtn.Click += (sender, args) =>
{
    // Don't dismiss dialog.
    Console.WriteLine("I am here to stay!");
};
noBtn.Click += (sender, args) =>
{
    // Dismiss dialog.
    Console.WriteLine("I will dismiss now!");
    dialog.Dismiss();
};

Need Your Help

Unresolved external symbol LNK2019

c++ visual-studio linker linker-errors unresolved-external

First of all, I know this question is all over this site but I have looked at almost all of them and can't seem to find out what is wrong. This is in VS 2012. Thanks.

how to ignore self signed certificate error node.js soap.js

javascript node.js ssl soap-client

I have created a soap client in node.js using soap.js.Soap communication is done over https. When I try to connect I keep getting this error