我是xamarin表格的新手。我在点击 NavigationBar后退按钮时尝试显示displayAlert。我尝试过实施this article。问题是当我点击弹出窗口没有出现的按钮时,我在OnOptionsItemSelected方法上放置了一个调试器,看它是否被调用,它没有。这是我的MainActivity.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);
}
}
我在MasterDetailPage中使用它
答案 0 :(得分:1)
isaman kumara 于 2019-06-01 发表的评论如下:
<块引用>当您将以下行添加到 MainActivity 时,问题将得到解决 OnCreate 方法(在 LoadApplication(new App()); 行之后)
Android.Support.V7.Widget.Toolbar 工具栏
= this.FindViewById
其中一个回复是这样说的:
<块引用>这似乎不再起作用。 SetSupportActionBar 需要一个 AndroidX.AppCompat.Widget.Toolbar 类型的参数,它不起作用 使用 Android.Support.V7.Widget.Toolbar。
通过将它添加到 LoadApplication 行之后的 MainActivity 的 OnCreate 方法,我能够在 Xamarin Forms 4.8 中再次运行 OnOptionsItemSelected:
# -*- coding: UTF-8 -*-
很抱歉没有直接对之前的评论发表评论,但我没有足够的声望点来这样做。
答案 1 :(得分:0)
您可能尚未创建触发事件。 在要覆盖后退按钮的内容页面中,请尝试以下操作:
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);
}
};
然后你会得到这个事件和一个弹出窗口,询问你是否真的,真的想回去。
答案 2 :(得分:0)
我也遇到了同样的问题,并找到了解决方案。问题是MainActivity
是FormsAppCompactActivity
的子类,而不是原来的FormsApplicationActivity
的旧MainActivity
的子类。因此,假设新FormsAppCompactActivity
将以下行添加到MainActivity
OnCreate方法中(在LoadApplication(new App());
行之后),该问题将得到解决。
Android.Support.V7.Widget.Toolbar toolbar
= this.FindViewById<Android.Support.V7.Widget.Toolbar>(Resource.Id.toolbar);
SetSupportActionBar(toolbar);
引用的URL和线程如下 https://forums.xamarin.com/discussion/comment/218663
答案 3 :(得分:0)
我知道这是一个老问题,但是您可以像这样通过OnPopViewAsync
跟踪NavigationRenderer
事件:
[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
}
}
}
使用此代码,您可以在Android中的同一位置捕获两个事件,同时按下硬件后退按钮和NavigationBar后退按钮。
希望这会有所帮助