Jestem nowicjuszem do form xamarin. Próbuję pokazać Displayalert, gdy kliknął przycisk Navigation Back . Próbowałem wdrożyć Ten artykuł. Problem polega na tym, kiedy kliknięcie przycisku popup nie przychodzi, umieściłem debuger na metodzie Onoptionitemseledes, aby sprawdzić, czy jest to powołanie, czy nie, nie. To moja ta nawigacja.cs

        protected override void OnCreate(Bundle bundle)
        { 
            TabLayoutResource = Resource.Layout.Tabbar;
            ToolbarResource = Resource.Layout.Toolbar;

            base.OnCreate(bundle);

            global::Xamarin.Forms.Forms.Init(this, bundle);
            global::Xamarin.FormsMaps.Init(this, bundle);
            LoadApplication(new App());

            Android.Support.V7.Widget.Toolbar toolbar = this.FindViewById<Android.Support.V7.Widget.Toolbar>(Resource.Id.toolbar);
            SetSupportActionBar(toolbar);

        }


        public override bool OnOptionsItemSelected(IMenuItem item)
        {//Placed a debugger here
            // check if the current item id is equals to the back button id
            if (item.ItemId == 16908332)
            {
                // retrieve the current xamarin forms page instance
                var currentpage = Xamarin.Forms.Application.Current.MainPage.Navigation.NavigationStack.LastOrDefault() as NavBackButtonContentPage;

                // check if the page has subscribed to the custom back button event
                if (currentpage?.CustomBackButtonAction != null)
                {
                    // invoke the Custom back button action
                    currentpage?.CustomBackButtonAction.Invoke();
                    // and disable the default back button action
                    return false;
                }

                // if its not subscribed then go ahead with the default back button action
                return base.OnOptionsItemSelected(item);
            }
            else
            {
                // since its not the back button click, pass the event to the base
                return base.OnOptionsItemSelected(item);
            }
        }

Używam go wewnątrz masterdEtailpage

1
A for android 4 czerwiec 2018, 11:40

3 odpowiedzi

Najlepsza odpowiedź

Miałem też ten sam problem i znalazłem rozwiązanie. Problem jest MainActivity był sub-klasyking z FormsAppCompactActivity zamiast starego FormsApplicationActivity, który był poprzednią klasą rodzicielską dla MainActivity. Więc załóżmy błąd na nowym FormsAppCompactActivity

Problem zostanie ustalony, gdy dodasz następujące linie do MainActivity Metoda ONCREATE (po linii LoadApplication(new App());)

Android.Support.V7.Widget.Toolbar toolbar 
                = this.FindViewById<Android.Support.V7.Widget.Toolbar>(Resource.Id.toolbar);
            SetSupportActionBar(toolbar);

Odwołany adres URL i wątek w następujący sposób https://forums.xamarin.com/discussion/comment/218663

https://theconfuzedsourceCode.wordpress.com/2017/03/02/formsappCompcompatactivity-is-Not-calling-onoptionsitemseled-xamarin-Android/

1
isaman kumara 1 czerwiec 2019, 10:44

Wiem, że jest to stare pytanie, ale możesz śledzić wydarzenie OnPopViewAsync przez NavigationRenderer w ten sposób:

[assembly: ExportRenderer(typeof(NavigationPage), typeof(CustomNavigationRenderer))]
namespace YourApp.Droid
{
    public class CustomNavigationRenderer : NavigationPageRenderer
    {
        public CustomNavigationRenderer(Context context) : base(context)
        {
        }

        protected override async Task<bool> OnPopViewAsync(Page page, bool animated)
        {
            // Write your code here
        }
    }
}

Korzystając z tego kodu, możesz przechwytywać oba zdarzenia w tym samym miejscu w Androidzie, przycisku Wstecz sprzętowy i naciśnięty przycisk Wstecz Nawigar.

Mam nadzieję że to pomoże

1
Ramón Esteban 26 lipiec 2019, 06:47

Prawdopodobnie nie stworzyłeś wydarzenia do wyzwolenia. W ContentPage chcesz zastąpić tylny przycisk, spróbuj tego:

            this.CustomBackButtonAction = async () =>
            {
                var result = await this.DisplayAlert(null,
                    "Hey wait now! are you sure " +
                    "you want to go back?",
                    "Yes go back", "Nope");

                if (result)
                {
                    await Navigation.PopAsync(true);
                }
            };

Następnie zdobędziesz wydarzenie i popup pytając, czy naprawdę chcesz wrócić.

0
Large 4 czerwiec 2018, 10:18