我正在使用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扩展),但这再次没有给出一致的结果。
我找不到任何功能或事件,这些功能或事件无法检测到导航事件何时完成,或任何阻止多个导航请求排队的设置。
如何解决这个问题?