使用Mono droid和slodge mvvmcross从堆栈中删除活动

时间:2013-01-21 11:21:22

标签: navigation xamarin.android mvvmcross

我正试图找到一种从堆栈中删除活动的方法 - 我们的应用程序中有一个流程:activity / viewmodel a - > activity / viewmodel b - > activity / viewmodel c。在c中,用户可以选择日期或返回。如果他回去,他应该回到b。但是,如果他选择了一个日期,那么他将被发送到一个新的activity / viewmodel b实例,而“old”的activity / viewmodel b实例已经过时,应该删除。

Stuart Lodge的建议(在类似的线程上,仅用于单声道触摸)是使用RequestRemoveBackStep(),但我不知道如何使用它,我无法找到一个例子。

有人能指出我正确的方向吗?

此致

1 个答案:

答案 0 :(得分:1)

RequestRemoveBackStep()方法是IMvxViewDispatcher接口的成员,并在某些平台上实现:

public interface IMvxViewDispatcher : IMvxMainThreadDispatcher
{
    bool RequestNavigate(MvxShowViewModelRequest request);
    bool RequestClose(IMvxViewModel whichViewModel);
    bool RequestRemoveBackStep();
}

来自https://github.com/slodge/MvvmCross/blob/vnext/Cirrious/Cirrious.MvvmCross/Interfaces/Views/IMvxViewDispatcher.cs

然而,总是这样做并不简单......例如,在Droid上,它目前实现为:

    public bool RequestRemoveBackStep()
    {
        // not supported on Android? Not sure how to do this currently...
        return false;
    }

来自https://github.com/slodge/MvvmCross/blob/vnext/Cirrious/Cirrious.MvvmCross.Droid/Views/MvxAndroidViewDispatcher.cs

有关于此功能的问题已记录 - 例如https://github.com/slodge/MvvmCross/issues/80 - 但似乎可能只是从未来的Mvx实现中删除此功能 - 特别是因为对每个平台上的每个视图都不是很容易做到。


如果您现在需要此类功能,那么您需要找到自己实现此功能的方式......具体取决于您的具体用例(抱歉 - 您当前用例的详细信息不是从问题中我明白了。)

有几种技术路线可供选择,包括:

  • 使用NoHistory标志
  • 使用RequestClose(oldviewModel)来电
  • 向您的Presenter
  • 添加逻辑
  • 使用Messenger请求关闭自己的视图。