Conductor:弹出到控制器而不显示在视图中

Conductor: Popping to controller without showing in view

我有一个应用程序使用 Conductor 来处理它的底部导航栏导航。为了简洁起见,我将尽量简明扼要地描述它。 该应用程序有大量逻辑,我希望尽可能少地触及这些逻辑

我遇到的问题与 ControllerChangeHandler.onChangeCompleted()

有关

底部导航结构如下..

Dashboard | Login | Doctors | Locations | More

当用户通过 Login 选项卡登录时,Conductor 会很快弹出到我的 Dashboard Controller,然后启动一个新的 activity,这样当用户点击后退按钮 return 到 BottomNav Activity 并登陆仪表板。

我遇到的问题是,在新 activity 启动之前,用户能够看到仪表板视图闪烁半秒钟。

  router.popToTag(newTag, null)

^^ 是否应该为 ChangeHandler 传递 null 以防止任何视图交换?或者它会在没有任何花哨的动画的情况下简单地交换视图?我相信这就是我困惑的根源。

我希望通过将 ChangeHandler 设置为 null,不会有可见的动画,但在启动 activity 之前视图仍然会交换。

不幸的是,我的登录逻辑和流程紧紧依赖于 OnChangeCompleted()。所以我需要 Conductor 弹出到新控制器,我只需要它对用户完全不可见...

有什么建议吗??我认为如果直接在代码行下回答我的问题,那将对我有很大帮助。

Conductor 附带 class com.bluelinelabs.conductor.internal.NoOpControllerChangeHandler,应该适合您的用例。查看源代码,它除了调用 ControllerChangeCompletedListener.onChangeCompleted() 外什么也没做。据我了解,这应该意味着没有添加或删除视图。

为了回答您关于传入 null 更改处理程序的问题,库中负责处理更改的内部方法包含以下代码:

if (inHandler == null) {
    handler = new SimpleSwapChangeHandler();
} else if (inHandler.hasBeenUsed && !inHandler.isReusable()) {
    handler = inHandler.copy();
} else {
    handler = inHandler;
}

其中 inHandler 指的是您传递给 popToTag 方法的更改处理程序。 SimpleSwapChangeHandler 确实如您所发现的那样在没有动画的情况下交换视图。