【问题标题】:Android Navigation Component 'global action'' issueAndroid 导航组件“全局操作”问题
【发布时间】:2020-07-24 02:27:21
【问题描述】:

在某些项目中我们使用导航架构组件,在导航图中我们添加了具有全局操作的 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”添加到目标,并在覆盖的方法navigate() 中检查此目标是否已在我们的后台堆栈中。

谁能想到其他解决方案?...

【问题讨论】:

    标签: android navigation-architecture


    【解决方案1】:

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

    【讨论】:

    • 谢谢你的回答,但我的第一个解决方案看起来比禁用按钮更好
    猜你喜欢
    • 2020-04-26
    • 1970-01-01
    • 1970-01-01
    • 2020-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-06
    • 1970-01-01
    相关资源
    最近更新 更多