Android 背面未保存的警告按在片段中

Android 背面未保存的警告按在片段中,android,android-fragments,Android,Android Fragments,我想在用户按back或退出片段时显示对话框,如果有一些数据未保存。我试图覆盖onbackpressed,但不幸的是,我得到了错误lateinit属性barcodeList尚未初始化。如何解决 以下是我的活动脚本: override fun onBackPressed() { val theFragment = supportFragmentManager.fragments for(i in 0 until theFragment.size) { if(t

我想在用户按back或退出片段时显示对话框,如果有一些数据未保存。我试图覆盖onbackpressed,但不幸的是,我得到了错误
lateinit属性barcodeList尚未初始化
。如何解决

以下是我的活动脚本:

override fun onBackPressed() {
    val theFragment = supportFragmentManager.fragments
    for(i in 0 until theFragment.size)
    {
        if(theFragment[i].tag == "stocker_fragment")
        {
            StockerFragment().onBackPressed()
        }
    }
}
这是一个片段:

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上初始化了条形码列表,一切正常。onBackPressed中只有一个错误


我的最后一个问题是,如何知道用户是否在不按后退按钮的情况下退出片段?

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

您应该能够在Backpressed()上调整活动,如下所示:

你也可以这样做:

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

您可能还想找到一种方法来确定片段的onBackPressed是否决定了活动是否应该继续。然后,如果片段满意,您应该在活动中调用
super.onBackPressed()
,以便发生预期的返回行为(离开活动)。

那么您的问题是什么?只需添加一个其他部分..在活动中的返回按确定吗?错误是关于变量尚未初始化。idk kotlin,但在java中,在“活动”中的逻辑应该是这样的。如果未保存,则显示对话框else
super.onBackPressed()
!我的第二个问题呢?我如何知道用户是否以另一种方式从片段中退出,如按menu键退出到另一个片段?最好注意片段的生命周期:
override fun onBackPressed() {
    supportFragmentManager.fragments.forEach { fragment ->
        if (fragment is StockerFragment) {
            fragment.onBackPressed()
        }
    }
}