【问题标题】:How to disable back button functionality until a task is completed inside a fragment?如何在片段内完成任务之前禁用后退按钮功能?
【发布时间】:2020-08-25 21:18:33
【问题描述】:

我使用单个活动作为我的片段的容器,我的 onCreate 方法中的第二个片段在协程范围内运行 for 循环,但是如果用户按下系统的后退按钮,应用程序将崩溃并出现空指针异常...如何在协程作业完成之前禁用后退按钮功能?

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    setClickListeners()
    //This creates buttons on the layout dynamically
    GlobalScope.launch(Dispatchers.Main) {
        delay(100)
        for (i in 0 until runTillAndHowMany) {
            createButton()
            delay(25)
        }
    }

}

我知道在 onCreate 中使用 GlobalScope 这样的做法太错误了,但没有找到任何替代方法,我希望在屏幕上一个一个地创建自定义按钮的动画。

我正在使用 NavigationComponent 库和过渡动画

【问题讨论】:

    标签: android android-layout android-fragments android-activity kotlin-coroutines


    【解决方案1】:

    您可以创建一个布尔变量来处理这个问题。所以在你的 Activity 中你可以这样声明它:

    var shouldGoBack: Boolean = false
    

    然后你重写你的 onBackPressed 方法,如下所示

    override fun onBackPressed() {
       if(shouldGoBack)
         super.onBackPressed()
    }
    

    最后,您访问 Fragment 上的变量,并在协程完成后将其设置为 true,如下所示:

    (activity as YourActivity).shouldGoBack = true
    

    让我知道它是否有效!

    【讨论】:

    • 它起作用了,一旦我从片段返回,我还必须再次将布尔值重置为 false,现在我正在创建按钮的 for 循环中写这行 (activity as YourActivity).shouldGoBack = true,在这种情况下if (i == runTillAndHowMany-1)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-11
    • 2022-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-18
    • 1970-01-01
    相关资源
    最近更新 更多