XamarinForms AppCompat OnOptionsItemSelected
Я недавно обновил формы xamarin до версии 1.5.1-pre1, чтобы я мог использовать красивые темы AppCompat. Это работает и выглядит очень красиво.
У меня действительно есть одна проблема, в моем старом FormsApplicationActivity я использовал переопределение метода OnOptionsItemSelected для перехвата, когда пользователь нажимал на иконку стрелки назад и выполнял некоторую очистку viewmodel. По-видимому, этот метод не вызывается после использования FormsAppCompatActivity. Как я могу перехватить "мягкое" нажатие кнопки "назад" (значок на панели инструментов, а не кнопка "назад")?
Я также попытался переопределить Xamarin.Forms.Platform.Android.AppCompat.NavigationPageRenderer, но я не могу переопределить его:(
Кто-нибудь знает, как я могу это перехватить?
2 ответа
Посмотрите на последние две строки OnCreate() После добавления их OnOptionsItemSelected был вызван, как и ожидалось).
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
}
}
}
Надеюсь это поможет