片段中按下的未保存警告

时间:2018-02-24 16:19:03

标签: android android-fragments

如果有未保存的数据,我想在用户按下时显示对话框或从片段退出。我试图覆盖onbackpressed但不幸的是我收到了错误lateinit property barcodeList has not been initialized。怎么解决呢?

这是我的活动脚本:

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上初始化了barcodeList,一切都很好。只有onBackPressed中的错误。

我的最后一个问题是,我怎么知道用户是否在没有按下后退按钮的情况下退出片段?

1 个答案:

答案 0 :(得分:1)

我认为问题出在您的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()
        }
    }
}

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