如何使用Xamarin和MVVMCross向后/向上导航

时间:2018-01-23 10:16:46

标签: xamarin.android navigation android-actionbar mvvmcross

我正在问这个问题为自己创建一个这样的记录,我通过环顾四周找到答案,但我觉得我花了太长时间才弄明白。假设我在搜索中使用了错误的关键字,我试图将我在搜索中使用的关键字链接到此问题,并希望能帮助其他人。

我试图使用OnOptionsItemSelected方法导航回上一个活动。这就是Android允许您按下操作栏按钮的方式。

public override bool OnOptionsItemSelected(IMenuItem item)
{
    if (item.ItemId != global::Android.Resource.Id.Home) return base.OnOptionsItemSelected(item);

    ViewModel.BackNavigationButtonCommand.Execute();
    return true;
}

我使用以下方式启用了后退按钮:

SupportActionBar.SetHomeButtonEnabled(true);
SupportActionBar.SetDisplayHomeAsUpEnabled(true);

然而,SetDisplayHomeAsUpEnabled回调没有转到OnOptionsItemSelected。

1 个答案:

答案 0 :(得分:1)

此解决方案的答案是使用activity属性:

[Activity(
    Label = "Project Wavelength"
    , Icon = "@drawable/icon"
    , Theme = "@style/Theme.AppCompat.Light.DarkActionBar"
    , ScreenOrientation = ScreenOrientation.Portrait
    , LaunchMode = LaunchMode.SingleTop)]

LaunchMode = LaunchMode.SingleTop ,用于返回Backstack中的现有活动。

[Activity(Label = "DevicesWithSensorsForRoom"
    , Icon = "@drawable/icon"
    , ScreenOrientation = ScreenOrientation.Portrait
    , Theme = "@style/Theme.AppCompat.Light.DarkActionBar"
    , ParentActivity = typeof(RoomsOverviewActivity)
    , LaunchMode = LaunchMode.SingleTop)]

ParentActivity = typeof(RoomsOverviewActivity),用于定义要返回的父级。

我不知道是否有使用viewmodels的MVVMCross解决方案。然而,这对我现在有用。如果有MVVMCross解决方案,我想听听它。

这些属性不需要OnOptionsItemSelected和SetDisplayHomeAsUpEnabled。