Android导航组件“全局操作”问题

时间:2020-04-11 10:47:07

标签: android navigation-architecture

在某些项目中,我们使用导航体系结构组件,在导航图中,我们添加了带有全局操作的 Fragment ,但是问题是当快速多次单击按钮后导航到 Fragment >-片段会多次打开。

我有一些解决此问题的方法:

  1. class SafeClickListener(
                private var defaultIntervalMs: Long = 1000,
                private val onSafeCLick: (View) -> Unit
        ) : View.OnClickListener {
    
                private var lastTimeClicked: Long = 0
    
                override fun onClick(v: View) {
                    if (SystemClock.elapsedRealtime() - lastTimeClicked < defaultIntervalMs) {
                        return
                    }
                    lastTimeClicked = SystemClock.elapsedRealtime()
                    onSafeCLick(v)
                }
        }
    
  2. 对全局操作使用app:launchSingleTop="true",但我们仍然看到打开了多个 Fragments (此解决方案仅解决了popBackStack问题)

  3. 使用自定义片段导航器,例如,将自定义属性'mustBeOnce'添加到Destination,并在覆盖的方法navigate()中检查此目标是否已在我们的堆栈中。

谁可能会提出其他解决方案?...

1 个答案:

答案 0 :(得分:0)

如果要避免意外单击,则必须在调用Clicklistener后禁用该按钮。然后,当您返回上一个屏幕后,必须启用onResume()方法中的按钮。