XamarinForms AppCompat OnOptionsItemSelected

Я недавно обновил формы xamarin до версии 1.5.1-pre1, чтобы я мог использовать красивые темы AppCompat. Это работает и выглядит очень красиво.

У меня действительно есть одна проблема, в моем старом FormsApplicationActivity я использовал переопределение метода OnOptionsItemSelected для перехвата, когда пользователь нажимал на иконку стрелки назад и выполнял некоторую очистку viewmodel. По-видимому, этот метод не вызывается после использования FormsAppCompatActivity. Как я могу перехватить "мягкое" нажатие кнопки "назад" (значок на панели инструментов, а не кнопка "назад")?

Я также попытался переопределить Xamarin.Forms.Platform.Android.AppCompat.NavigationPageRenderer, но я не могу переопределить его:(

Кто-нибудь знает, как я могу это перехватить?

2 ответа

Решение

Посмотрите на последние две строки OnCreate() После добавления их OnOptionsItemSelected был вызван, как и ожидалось).

https://raw.githubusercontent.com/UdaraAlwis/Xamarin-Playground/master/XFNavBarBackBtnClickOverride/XFNavBarBackBtnClickOverride/XFNavBarBackBtnClickOverride.Droid/MainActivity.cs

        Toolbar toolbar = this.FindViewById<Toolbar>(Resource.Id.toolbar);

        SetSupportActionBar(toolbar);

Вы можете добавить следующее в ваш пользовательский рендер. Вы можете либо использовать плагин текущей активности, либо привести свой контекст к активности.

var toolbar = CrossCurrentActivity.Current?.Activity?.FindViewById<Toolbar>(Resource.Id.toolbar);

toolbar.NavigationClick += ToolbarNavigationClick;

В Xamarin.Forms есть лучший способ перехватить нажатую кнопку возврата NavigationBar и нажатую аппаратную кнопку возврата, что создает ваш собственный NavigationRenderer и переопределение метода OnPopViewAsync:

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

Надеюсь это поможет

Другие вопросы по тегам