导体:弹出控制器时未在视图中显示

时间:2019-09-10 18:05:00

标签: android kotlin controller bottomnavigationview conductor

我有一个使用Conductor来处理其底部导航栏导航的应用程序。为了简洁起见,我将尽量简洁地描述它。 该应用程序具有适当的逻辑,我想尽可能地减少触碰

我与ControllerChangeHandler.onChangeCompleted()有关的问题

底部导航的结构是这样。

Dashboard | Login | Doctors | Locations | More

当用户通过Login标签登录时,Conductor很快弹出到我的Dashboard Controller,然后启动新的活动,因此,当用户单击“后退”按钮时,他们将返回到BottomNav活动并降落在仪表板上。

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

  router.popToTag(newTag, null)

^^应该为ChangeHandler传递null来防止视图交换吗?还是简单地交换视图而没有任何奇特的动画?我相信这就是我困惑的根源。

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

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

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

1 个答案:

答案 0 :(得分:0)

导体随附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确实会交换与您发现的动画完全相同的视图。

相关问题