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

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

底部导航的结构是这样。

Dashboard | Login | Doctors | Locations | More

当用户通过Login选项卡登录时,Conductor迅速弹出到我的Dashboard Controller中,然后启动一个新活动,以便当用户单击“后退”按钮时,他们返回到BottomNav活动并着陆在仪表板上。

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

  router.popToTag(newTag, null)


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

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

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

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

最佳答案

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

08-04 12:00