XamarinForms AppCompat OnOptionsItemSelected

3

我最近将Xamarin Forms更新到1.5.1-pre1,这样我就可以使用美丽的AppCompat主题了。它看起来非常漂亮。

但是,我有一个问题,在我的旧FormsApplicationActivity中,我曾经重写OnOptionsItemSelected方法来拦截当用户点击返回箭头图标时,并进行一些视图模型清理。显然,在使用FormsAppCompatActivity后,此方法未被调用。如何拦截“软”返回按钮按下(工具栏图标而不是物理的返回按钮)?

我还尝试覆盖Xamarin.Forms.Platform.Android.AppCompat.NavigationPageRenderer,但是好像无法覆盖 :(

有人知道我如何拦截这个吗?


1
为什么不用 OnDisappearing() - Rohit Vipin Mathews
谢谢,OnDisappearing用于清理vm的东西,我必须确保只在它从堆栈中弹出时清理它。但仍然不清楚为什么其他方法(on options item selected)没有被调用。 - xabre
3个回答

1
您可以将以下内容添加到自定义渲染器中。您可以使用当前活动插件,或者将上下文转换为活动。
var toolbar = CrossCurrentActivity.Current?.Activity?.FindViewById<Toolbar>(Resource.Id.toolbar);

toolbar.NavigationClick += ToolbarNavigationClick;

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
        }
    }
}

希望这可以帮到你。

0

好的回答 :) 这就是诀窍。我会将其标记为被接受的答案。我在2015年为我参与的项目找到了一个解决方法,但现在知道有一种“适当的解决方法”是很好的。 - xabre

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接