关于MvvMCross中的导航,我有两个问题。
- 如何返回到导航堆栈中的一个视图模型?或者说:如何返回指定数量的视图模型?
如何截断导航堆栈?
例如:在堆栈上有 A|B|C,导航到 D 后,堆栈变为:D
关于MvvMCross中的导航,我有两个问题。
如何截断导航堆栈?
例如:在堆栈上有 A|B|C,导航到 D 后,堆栈变为:D
操作返回栈的功能因平台和应用程序而异,例如:
因此,在 MvvmCross 中没有定义此类 UI 更改的实际实现。
相反,您需要在应用程序的 presenter
中实现。
您需要遵循的基本流程是:
确定您的应用程序结构和要实现的效果
为此效果声明自定义演示提示 - 例如
public class MyFunkyPresentationHint : MvxPresentationHint
{
public int DegreeOfFunkiness { get; set; }
}
base.ChangePresentation(new MyFunkyPresentationHint() { DegreeOfFunkiness=27 });
public override void ChangePresentation(MvxPresentationHint hint)
{
if (hint is MyFunkyPresentationHint)
{
// your code goes here
return;
}
base.ChangePresentation(hint);
}
查看自定义Presenter的示例,请参见:http://slodge.blogspot.com/2013/06/presenter-roundup.html
有关返回栈操纵的示例之一,请查看某些标准Presenter中如何实现Close(this)
。
这里有一篇很好的文章,介绍了如何执行基于MVVMCross的演示器使用。文章涵盖了基于iOS和Android片段的导航。然而,还有一种导航方式是基于Activity的。在这种情况下,可以使用Android意图(intents),并为其添加一些标志来帮助实现。
private class CustomPresenter : MvxAndroidViewPresenter
{
public override void Show(MvxViewModelRequest request)
{
if (request.PresentationValues?["NavigationMode"] == "ClearStack")
{
var intent = CreateIntentForRequest(request);
intent.AddFlags(ActivityFlags.ClearTask | ActivityFlags.NewTask);
Show(intent);
return;
}
base.Show(request);
}
}
ActivityFlags.ClearTask | ActivityFlags.NewTask
会使您的新活动成为堆栈上唯一的活动。