我是Xamarin.Forms的新手。我尝试在单击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
里面用。
4条答案
按热度按时间dxxyhpgq1#
isaman kumara在2019-06-01的评论中说:
将以下行添加到MainActivity OnCreate方法(LoadApplication(new App())之后)后,此问题将得到修复;行)
工具栏工具栏= this.FindViewById<Android.Support.V7.Widget.Toolbar>(资源标识工具栏);设置支持操作栏(工具栏);
其中一个答复是这样说的:
SetSupportActionBar需要一个AndroidX.AppCompat.Widget.Toolbar类型的参数,但它不适用于Android.Support.V7.Widget. Toolbar。
我可以通过在LoadApplication行之后将以下代码添加到MainActivity的OnCreate方法中,使OnOptionsItemSelected在Xamarin Forms 4.8中再次工作:
抱歉没有直接评论前面的评论,但我没有足够的声誉点这样做。
ippsafx72#
我也遇到了同样的问题,并找到了解决方案。问题是
MainActivity
是FormsAppCompactActivity
的子类,而不是旧的FormsApplicationActivity
,后者是MainActivity
的前一个父类。因此,假设新FormsAppCompactActivity
上存在bug将以下行添加到
MainActivity
OnCreate方法(LoadApplication(new App());
行之后)时,此问题将得到修复引用的URL和线程如下https://forums.xamarin.com/discussion/comment/218663
https://theconfuzedsourcecode.wordpress.com/2017/03/02/formsappcompatactivity-is-not-calling-onoptionsitemselected-xamarin-android/
5cnsuln73#
我知道这是一个老问题,但是您可以通过
NavigationRenderer
跟踪OnPopViewAsync
事件,如下所示:使用此代码,您可以在Android中的同一位置捕获这两个事件,即按下硬件后退按钮和NavigationBar后退按钮。
希望这能帮上忙
fafcakar4#
您可能尚未创建用于触发的事件。在要覆盖后退按钮的内容页中,请尝试以下操作:
然后你会得到一个事件和一个弹出窗口,询问你是否真的真的想回去。