首页 > 解决方案 > 使用 NavController 导航时只允许一个实例

问题描述

我目前在我的项目中使用 Android 导航架构。它具有可以使用快捷方式启动任何片段的功能。目前我正在使用 NavController 在单击快捷方式时导航到所需的目的地。但是当我多次单击快捷方式时,每次都会创建一个新的片段实例。所以,我的问题是,有没有办法在使用 NavController 导航到片段时只接受一个片段实例?我在谷歌上搜索了很多次,但一无所获。提前致谢。

标签: androidandroid-architecture-navigation

解决方案


您可以使用 safeOnClickListener 而不是默认的 onClickListener 来捕获点击快捷方式,因此基本上使用 safeOnClickListener 您可以忽略给定持续时间的所有点击事件。

    class SafeClickListener(
        private var defaultInterval: Int = 2000,
        private val onSafeCLick: (View) -> Unit
    ) : View.OnClickListener {

        private var lastTimeClicked: Long = 0

        override fun onClick(v: View) {
            if (SystemClock.elapsedRealtime() - lastTimeClicked < defaultInterval) {
                return
            }
            lastTimeClicked = SystemClock.elapsedRealtime()
            onSafeCLick(v)
        }
    }

    fun View.setSafeOnClickListener(delay: Int = 2000, onSafeClick: (View) -> Unit) {
        val safeClickListener = SafeClickListener(delay) {
            onSafeClick(it)
        }
        setOnClickListener(safeClickListener)
    }

推荐阅读