如果有一些数据未保存,我想在用户按返回键或退出 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/