我看到许多人使用fragmentManager进行活动片段调用。所以我也试过了。当我首先单击工具栏时,会得到这样的错误。
kotlin.UninitializedPropertyAccessException: lateinit property mActivity has not been initialized尽管我重写并初始化了该方法,但在启动onAttach时看不到日志。为什么我不能初始化活动?Myfragment为DaggerFragment。
主按钮点击
binding.toolbar.setOnClickListener {
currentFramgnet = MainPictureFragment().instance
changeFragment(this@MainActivity, binding.fragmentContainer, currentFramgnet!!)
(currentFramgnet as MainPictureFragment).changeDataset("button OnClick")
}主changeFragment
fun changeFragment(activity: AppCompatActivity, view: View, fragment: Fragment) {
val fragmentManager = activity.supportFragmentManager
fragmentManager
.beginTransaction()
.replace(view.id, fragment)
.commit()
}片段changeDataset
fun changeDataset(mes : String){
showLog("changeDataset : "+mes)
showToast(mActivity,"11111")
}片段onAttach
private lateinit var mActivity :Activity
override fun onAttach(context: Context) {
super.onAttach(context)
showLog("onAttach")
if (context is Activity) mActivity = context
}更新:我对此进行了记录,发现changeDataset是在onAttach()之前调用的
D/TAG: changeDataset : button OnClick
D/TAG: onAttach发布于 2020-05-19 14:19:07
您的问题是在执行片段事务之前尝试访问上下文,因为您使用了commit()。修复它的简单方法是使用commitNow()。
https://stackoverflow.com/questions/61892782
复制相似问题