Xamarin C# - Android - 防止 AlertDialog 在 PositiveButton 单击时关闭 [英] Xamarin C# - Android - Prevent an AlertDialog from closing on PositiveButton click

查看:16
本文介绍了Xamarin C# - Android - 防止 AlertDialog 在 PositiveButton 单击时关闭的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是 Xamarin 的新手,不知道如何在 c# 中执行以下操作.我想防止在单击正/负"按钮时关闭警报对话框.我需要先对输入进行一些验证.如果输入正确,对话框可以关闭,否则我将显示带有说明的消息.基本上,我有以下代码:

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....
}

现在,我在 StackOverflow 上发布了以下帖子:如何防止在单击按钮时关闭对话框

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

我认为下面的代码(取自线程)有解决方案,但我不知道如何重写我的 c# 代码来实现 Java:

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.
    }
});

如何在 c# 中编码?尤其是setPositiveButton区域的override部分...

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

推荐答案

这需要跳出框框思考.您必须直接操作 AlertDialog 对象:

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();
};

这篇关于Xamarin C# - Android - 防止 AlertDialog 在 PositiveButton 单击时关闭的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆