1

我有一个使用 Conductor 来处理它的底部导航栏导航的应用程序。为简洁起见,我将尝试尽可能简洁地描述它。该应用程序有大量的逻辑,我想尽可能少地触摸它们

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

底部导航的结构是这样的..

Dashboard | Login | Doctors | Locations | More

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

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

  router.popToTag(newTag, null)

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

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

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

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

4

1 回答 1

0

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

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

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

whereinHandler指的是您传递给该popToTag方法的更改处理程序。SimpleSwapChangeHandler正如您所发现的那样,确实交换了没有动画的视图。

于 2019-09-11T15:57:52.943 回答