【发布时间】:2016-07-03 03:21:18
【问题描述】:
我正在尝试解决如何在 Xamarin.Forms 中显示“向上”箭头而不将页面推入堆栈。 IE。我只想在按下后退按钮时执行一个动作。我完全坚持这一点,所以任何帮助将不胜感激。
我尝试创建一个自定义渲染器来处理名为DisplayHomeAsBack 的视图属性。在渲染器中调用以下内容:
FormsAppCompatActivity context = ((FormsAppCompatActivity)Forms.Context);
Android.Support.V7.App.ActionBar actionBar = context.SupportActionBar;
if (actionBar != null)
{
actionBar.SetDisplayHomeAsUpEnabled(element.DisplayHomeAsBack);
}
不幸的是,尽管所有在线教程和 android 的 stackoverflow 问题都建议使用这种方法,但这似乎完全没有任何作用。
计划是我可以在 MasterDetailPage 中使用“OnBackButtonPressed”覆盖,这应该允许我执行此操作。不幸的是,到目前为止,显示返回按钮是一个更大的障碍!
有没有更好的方法来做到这一点,或者我如何才能让当前的机制发挥作用?
编辑
如果有帮助,我已经创建了一个项目并将其上传到 Xamarin 支持论坛上的这个问题。 http://forums.xamarin.com/discussion/comment/186330#Comment_186330
【问题讨论】:
-
我认为这取决于您尝试覆盖后退按钮图标的位置。听起来您正试图覆盖
MasterDetailPage上的后退按钮图标,我假设它位于NavigationPage中?另外,这是MasterDetailPage导航堆栈中的第一页还是您必须单击其他页面才能到达它?最后,您只想更改单击它时执行的操作,而不是更改按钮实际看起来正确的样子? -
我想我只是在使用静态(在上面的代码中),所以我认为这并不重要,但我可能错过了一些东西。你是对的,我有一个 MasterDetailPage,它有一个 NavigationPage 作为它的细节。 MasterDetailPage 是应用程序的主页。为了让您了解我正在尝试做什么,我提出了一个内部视图,我希望该视图在按下后退按钮时消失(因此需要更改图标和行为)。如果可行的话,我很乐意以任何其他方式做到这一点。
-
您是否尝试过在
MainActivity中覆盖OnOptionItemsSelected?您可以找出要检查的菜单项 ID,然后使用MessagingCenter表示是时候执行您的自定义操作并在OnOptionItemsSelected中返回false以表示您正在自己处理它。如果这不起作用,那么您可能必须覆盖默认的后退按钮并实现自己的。 -
但这不会将图标更改为背面?
-
好的,所以您确实想更改图标的外观。然后我认为您需要覆盖
OnCreateOptionsMenu以更改图标的外观以及单击时的行为。当我有机会发布我的OnCreateOptionsMenu的答案时,我正在添加一个自定义图标,而不仅仅是尝试重新添加箭头,因此它可能会有所不同。我想您也可以将一个新页面推送到屏幕上,但它看起来完全一样,只是它显示了您的自定义视图......然后您将获得返回按钮并且它会起作用
标签: android xamarin xamarin.android xamarin.forms android-appcompat