如何防止多个导航呼叫?

时间:2018-08-10 12:24:31

标签: android navigation android-navigation android-jetpack

我正在使用Google提供的新的Android导航API,但与旧的Intent系统不同,它不会阻止在实现第一次单击按钮后进行的调用,因此,如果用户在导航之前快速点击了一个按钮事件发生时,导航事件的上下文会发生崩溃。

  

我尝试在包含以下内容的所有活动中实现一个功能   将Navigation调用包装在bool检查中的NavHostFragment   这样,如果发生导航事件,所有其他事件都将被阻止,例如:

public void navigateTo(View v, int actionId)
{
    if(isNavigating())
    {
        setNavigating(true);
        Navigation.findNavController(v).navigate(actionId);
    }
    else
    {
        setNavigating(false);
    }
}
  

这可行,但是我无法检测到导航事件何时发生   完成,以便可以重新设置布尔值,我尝试了此操作:

navHostFragment.getNavController().addOnNavigatedListener((controller, destination) -> 
{
    setNavigating(false)
});

但是此事件在导航完成之前触发,过早重置了布尔值。我还在所有目标片段的onResume()中重置了此布尔值(通过从BaseFragment扩展),但这再次没有给出一致的结果。

我找不到任何功能或事件,这些功能或事件无法检测到导航事件何时完成,或任何阻止多个导航请求排队的设置。

如何解决这个问题?

0 个答案:

没有答案