我有两个关于MvvMCross导航的问题。
如何截断导航堆栈?
例如: A | B | C 在堆栈上,导航到D会使堆栈看起来像: D
答案 0 :(得分:8)
操纵后台堆栈的功能是平台和应用程序特定的 - 例如:
因此,在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);
}
有关自定义演示者的示例,请参阅:http://slodge.blogspot.com/2013/06/presenter-roundup.html
有关Backstack操作的一个示例,请参阅某些标准演示者中Close(this)
的实现方式。
答案 1 :(得分:4)
有一篇很好的文章提供了相关信息here。 这涵盖了基于iOS和Android片段的导航。 缺少基于活动的导航的情况。 对于那种特殊情况,android意图可以帮助添加一些标志。
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
会使您的新活动成为堆叠中的唯一活动。