android - 背面未保存的警告被压在 fragment 中

标签 android android-fragments

如果有一些数据未保存,我想在用户按返回键或退出 fragment 时显示对话框。我正在尝试覆盖 onbackpressed 但不幸的是我收到错误 lateinit property barcodeList has not been initialized。如何解决?

这是我的 Activity 脚本:

override fun onBackPressed() {
    val theFragment = supportFragmentManager.fragments
    for(i in 0 until theFragment.size)
    {
        if(theFragment[i].tag == "stocker_fragment")
        {
            StockerFragment().onBackPressed()
        }
    }
}

这是 fragment :

fun onBackPressed() {
    var check = false
     // this barcodeList variable error.
    for(i in 0 until barcodeList.size)
    {
        if(barcodeList[i].barcode.trim()=="")
        {
            check = true
            break
        }
    }

    if (check)
    {
        AlertHelper(context).onBackPressedAlert()
    }
}

仅供引用:我已经在 onCreateView 上初始化了 barcodeList,一切正常。只有 onBackPressed 错误。

我的最后一个问题是,我如何知道用户是否在未按返回按钮的情况下退出 fragment ?

最佳答案

我认为问题出在 Activity 中的 onBackPressed() 实现中。使用 StockerFragment().onBackPressed() 行,您正在创建 StockerFragment 的新实例并对其调用 onBackPressed(),而不是在正在使用的实例上调用它。

您应该能够像这样调整您的 Activity onBackPressed():

override fun onBackPressed() {
    val theFragment = supportFragmentManager.fragments
    for(i in 0 until theFragment.size)
    {
        if(theFragment[i].tag == "stocker_fragment")
        {
            (theFragment[i] as StockerFragment).onBackPressed()
        }
    }
}

你也可以像这样让它更像 kotliny:

override fun onBackPressed() {
    supportFragmentManager.fragments.forEach { fragment ->
        if (fragment is StockerFragment) {
            fragment.onBackPressed()
        }
    }
}

您可能还想找出一种方法来确定 fragment 的 onBackPressed 是否已确定 Activity 是否应该保留。然后,如果 fragment 是快乐的,您应该在 Activity 中调用 super.onBackPressed(),以便发生预期的返回行为(离开 Activity)。

关于android - 背面未保存的警告被压在 fragment 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48964903/

相关文章:

android - 如何从一个 fragment 传递到另一个 fragment

java - Android 在 FragmentPagerAdapter 中更改 fragment 顺序

android - FragmentPagerAdapter - 如何处理方向变化?

android - fragment 和旋转

android - 在 fragment 中实现滑动标签

Android获取图库图片Uri路径

android - 如何将应用程序拆分为多个包?

android - SocialAuth 3.2 推特错误

android - 如何从 StagefrightRecorder 中提取 Video Muxer 部分?

android - 可以依赖 SQLiteConstraint 并让 SQLite 为我进行检查吗?有陷阱吗?