Confirmation Dialog on back button press event Xamarin.Forms

后端 未结 6 806
北海茫月
北海茫月 2020-12-14 19:16

I am stuck at one point in Xamarin.Forms application

On Back button press simply I want to ask user to confirm whether he really wants to exit or not, \"OnBackButton

相关标签:
6条回答
  • 2020-12-14 19:38

    Easy way to override hardware back button and show a confirmation dialog box to user

    protected override bool OnBackButtonPressed()
    {
        Device.BeginInvokeOnMainThread(async () =>
        {
            if (await DisplayAlert("Alert", "Are you sure you want to go back ?", "Yes", "No"))
            {
                base.OnBackButtonPressed();
    
                await Navigation.PopAsync();
             }
        });
    
        return true;
    }
    
    0 讨论(0)
  • 2020-12-14 19:38
     private async void OnDelete(object sender, EventArgs e)
            {
                var result = await this.DisplayAlert("Alert!", "Do you really want to exit?", "Yes", "No");
                if (result)
                {
    
                    var menuitem = sender as MenuItem;
                    string name = menuitem.BindingContext as string;
    
                    lielements.Remove(name);
                }
                else
                {
    
    
                }
    
            }
    
    0 讨论(0)
  • 2020-12-14 19:42
        protected override bool OnBackButtonPressed()
        {
            Device.BeginInvokeOnMainThread(async() => {
                var result = await this.DisplayAlert("Alert!", "Do you really want to exit?", "Yes", "No");
                if (result) await this.Navigation.PopAsync(); // or anything else
            });
    
            return true;
        }
    
    0 讨论(0)
  • 2020-12-14 19:49

    Here's the code that worked for me

    protected override bool OnBackButtonPressed()
        {
            Device.BeginInvokeOnMainThread(async () =>
            {
                var result = await this.DisplayAlert("Alert!", "Do you really want to exit?", "Yes", "No");
    
                if (result)
                {
                    System.Diagnostics.Process.GetCurrentProcess().CloseMainWindow(); // Or anything else
                }
            });
            return true;
        }
    
    0 讨论(0)
  • 2020-12-14 19:51

    If you are on Mainpage and want to exit your app then this code will help you.

    In your UI (PCL)

      protected override bool OnBackButtonPressed()
                {
    
                    Device.BeginInvokeOnMainThread(new Action(async () => {
                        var result = await this.DisplayAlert("Alert!", "Do you really want to exit?", "Yes", "No");
    
                        if (result)
                        {
                            if (Device.RuntimePlatform == Device.Android)
                                DependencyService.Get<IAndroidMethods>().CloseApp();
                        }
                    }));
                    return true;
                }
    

    Also create an Interface (in your UI PCL):

    public interface IAndroidMethods
    {
        void CloseApp();
    }
    

    Now implement the Android-specific logic in your Android project:

    [assembly: Xamarin.Forms.Dependency(typeof(AndroidMethods))]
    namespace Your.Namespace
    {
       public class AndroidMethods : IAndroidMethods
       {
           public void CloseApp()
           {
                 var activity = (Activity)Forms.Context;
                activity.FinishAffinity();
           }
       }
    }
    
    0 讨论(0)
  • 2020-12-14 19:53
    public override void OnBackPressed()
    {
        RunOnUiThread(
            async () =>
            {
                var isCloseApp = await AlertAsync(this, "NameOfApp", "Do you want to close this app?", "Yes", "No");
    
                if (isCloseApp)
                {
                    var activity = (Activity)Forms.Context;
                    activity.FinishAffinity();
                }
            });
    }
    
    public Task<bool> AlertAsync(Context context, string title, string message, string positiveButton, string negativeButton)
    {
        var tcs = new TaskCompletionSource<bool>();
    
        using (var db = new AlertDialog.Builder(context))
        {
            db.SetTitle(title);
            db.SetMessage(message);
            db.SetPositiveButton(positiveButton, (sender, args) => { tcs.TrySetResult(true); });
            db.SetNegativeButton(negativeButton, (sender, args) => { tcs.TrySetResult(false); });
            db.Show();
        }
    
        return tcs.Task;
    }
    

    Xamarin.Android await AlertDialog.Builder

    0 讨论(0)
提交回复
热议问题