我最近将xamarin表单更新为1.5.1-pre1,以便我可以使用漂亮的AppCompat主题。它的工作原理非常好。
我确实有一个问题,在我以前的旧FormsApplicationActivity中,当用户点击后退箭头图标并执行一些viewmodel清理时,我曾使用覆盖OnOptionsItemSelected方法来拦截。显然,使用FormsAppCompatActivity后不会调用此方法。 我怎样才能拦截"软"后退按钮(工具栏图标不是硬后退按钮)?
我还试图覆盖Xamarin.Forms.Platform.Android.AppCompat.NavigationPageRenderer,但我似乎无法覆盖它:(
有没有人知道如何拦截这个?
答案 0 :(得分:1)
您可以将以下内容添加到自定义渲染器中。您可以使用current activity plugin或将您的上下文投射到活动。
var toolbar = CrossCurrentActivity.Current?.Activity?.FindViewById<Toolbar>(Resource.Id.toolbar);
toolbar.NavigationClick += ToolbarNavigationClick;
答案 1 :(得分:0)
看看OnCreate()的最后两行在添加OnOptionsItemSelected后,按预期调用。
Toolbar toolbar = this.FindViewById<Toolbar>(Resource.Id.toolbar);
SetSupportActionBar(toolbar);
答案 2 :(得分:0)
在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
}
}
}
希望这会有所帮助