gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 00:06:10 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com