如果有未保存的数据,我想在用户按下时显示对话框或从片段退出。我试图覆盖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中的错误。
我的最后一个问题是,我怎么知道用户是否在没有按下后退按钮的情况下退出片段?
答案 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)。