在Android Xamarin中设置对话框按钮clicklistener

时间:2016-05-25 07:36:07

标签: c# visual-studio xamarin xamarin.android

我想在我的Xamarin Android应用程序(C#)中显示一个对话框警报,我想在点击按钮时对对话框进行操作。

从此之前,我使用此代码:

AlertDialog.Builder builder = new AlertDialog.Builder(this)
    .SetTitle("Delete")
    .SetMessage("Are you sure you want to delete?)
    .SetPositiveButton("No", (senderAlert, args) => { })
    .SetNegativeButton("Yes", (senderAlert, args) => {
    DatabaseHelper.Delete(item);
});
builder.Create().Show();

要做一个随机的例子,假设我想保持对话框打开,直到项目被删除,但我想在Android工作时禁用“是”按钮并更改消息文本。这可能来自我必须访问对话框并更改它的代码吗? senderAlert和args都没有任何有用的属性或方法。

我一直在寻找其他方法来构建我的对话框,我已经看到了这两个:

1)This guy正在使用下面的方式,但我的DialogInterface没有.OnClickListener()

builder.setPositiveButton("Test", 
new DialogInterface.OnClickListener()
{
    @Override
    public void onClick(DialogInterface dialog, int which)
    {
        //Do stuff to dialog
    }
});

2)This guy正在使用IDialogInterfaceOnClickListener,我一直试图找到一个如何这样做的例子,但我还没找到。好像他正在使用null而不是我想要的代码。

.setPositiveButton("OK", (Android.Content.IDialogInterfaceOnClickListener)null)

有什么想法吗?

3 个答案:

答案 0 :(得分:7)

我使用这样的东西:

      using (var builder = new AlertDialog.Builder(Activity))
      {
         var title = "Please edit your details:";
         builder.SetTitle(title);
         builder.SetPositiveButton("OK", OkAction);
         builder.SetNegativeButton("Cancel", CancelAction);
         var myCustomDialog = builder.Create();

         myCustomDialog.Show();
      }

      private void OkAction(object sender, DialogClickEventArgs e)
      {
         var myButton = sender as Button; //this will give you the OK button on the dialog but you're already in here so you don't really need it - just perform the action you want to do directly unless I'm missing something..
         if(myButton != null)
         {
             //do something on ok selected
         }
      }
      private void CancelAction(object sender, DialogClickEventArgs e)
      {
         //do something on cancel selected
      }

示例:https://wordpress.com/read/feeds/35388914/posts/1024259222

答案 1 :(得分:1)

您可以使用此课程

using Android.App;
using System.Threading.Tasks;

public class Show_Dialog
{
    public enum MessageResult
    {
        NONE = 0,
        OK = 1,
        CANCEL = 2,
        ABORT = 3,
        RETRY = 4,
        IGNORE = 5,
        YES = 6,
        NO = 7
    }

    Activity mcontext;
    public Show_Dialog(Activity activity) : base()
    {
        this.mcontext = activity;
    }


    /// <summary>
    /// Messbox function to show a massage box
    /// </summary>
    /// <param name="Title">to show Title for your messagebox</param>
    /// <param name="Message">to show Message for your messagebox</param>
    /// <param name="result">to get result for your messagebox; OK=1,   Cancel=2,   ingnore=3,   else=0</param>
    /// <param name="SetInverseBackgroundForced">to Set Inverse Background Forced</param>
    /// <param name="SetCancelable">to set force message box is cancelabel or no</param>
    /// <param name="PositiveButton">to show Title for PositiveButton</param>
    /// <param name="NegativeButton">to show Title for NegativeButton</param>
    /// <param name="NeutralButton">to show Title for your NeutralButton</param>
    /// <param name="IconAttribute">to show icon for your messagebox</param>
    /// <returns></returns>
    public Task<MessageResult> ShowDialog(string Title, string Message, bool SetCancelable = false, bool SetInverseBackgroundForced = false, MessageResult PositiveButton = MessageResult.OK, MessageResult NegativeButton = MessageResult.NONE, MessageResult NeutralButton = MessageResult.NONE, int IconAttribute = Android.Resource.Attribute.AlertDialogIcon)
    {
        var tcs = new TaskCompletionSource<MessageResult>();

        var builder = new AlertDialog.Builder(mcontext);
        builder.SetIconAttribute(IconAttribute);
        builder.SetTitle(Title);
        builder.SetMessage(Message);
        builder.SetInverseBackgroundForced(SetInverseBackgroundForced);
        builder.SetCancelable(SetCancelable);

        builder.SetPositiveButton((PositiveButton != MessageResult.NONE) ? PositiveButton.ToString() : string.Empty, (senderAlert, args) =>
            {
                tcs.SetResult(PositiveButton);
            });
        builder.SetNegativeButton((NegativeButton != MessageResult.NONE) ? NegativeButton.ToString() : string.Empty, delegate
        {
            tcs.SetResult(NegativeButton);
        });
        builder.SetNeutralButton((NeutralButton != MessageResult.NONE) ? NeutralButton.ToString() : string.Empty, delegate
        {
            tcs.SetResult(NeutralButton);
        });

        Xamarin.Forms.Device.BeginInvokeOnMainThread(() =>
        {
        });

        Xamarin.Forms.Device.BeginInvokeOnMainThread(() =>
        {
            builder.Show();
        });


        // builder.Show();
        return tcs.Task;
    }
}

您可以使用异步或同步功能

private void a()
{
    Show_Dialog msg = new Show_Dialog(this);
    msg.ShowDialog("Error", "Message");
}

private async void b()
{
    Show_Dialog msg1 = new Show_Dialog(this);
    if (await msg1.ShowDialog("Error", "Message", true, false, Show_Dialog.MessageResult.YES, Show_Dialog.MessageResult.NO) == Show_Dialog.MessageResult.YES)
    { 
        //do anything
    }
}

答案 2 :(得分:0)

Android.App.AlertDialog.Builder alertDilog = new Android.App.AlertDialog.Builder(this);

        alertDilog.SetTitle("simple alert");
        alertDilog.SetMessage("simple message");
        alertDilog.SetNeutralButton("OK", delegate
        {
            alertDilog.Dispose();
        });