我有一个Kotlin扩展函数来添加另一个Kotlin文件中的片段
fun Fragment.addFragment(tag: String?, id: Int, fragmentManager: FragmentManager) {
// will take care of adding the fragment.
val fragmentTransaction = fragmentManager.beginTransaction()
fragmentTransaction.add(id, this, tag)
fragmentTransaction.addToBackStack(tag)
fragmentTransaction.commit()
}
但每当我使用该扩展功能添加片段时,我就会遇到此崩溃
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v4.app.Fragment.setNextAnim(int)' on a null object reference
我正在使用这样的扩展功能:
MyFragment().addFragment("MyFragment", R.id.frame, fragmentMaganer)
在上述声明之后,如果我尝试调试我的代码,那么它会成功执行,直到
fragmentTransaction.commit()
但在我的活动的 onStart()方法之后我面临NullPointerException问题
但是如果我在Activity中直接使用相同的代码:
val myFragment = MyFragment()
val fragmentTransaction = fragmentManager.beginTransaction()
fragmentTransaction.add(R.id.frame, myFragment, tag)
fragmentTransaction.addToBackStack(tag)
fragmentTransaction.commit()
然后它的工作正常。有人可以解释为什么它不能使用扩展功能?
答案 0 :(得分:0)
当我创建一个单独的函数来实例化和最终化片段时,我也遇到了同样的问题。
但是当我的应用程序退出时,我没有创建最后一个删除剩余片段的事务。
我做的是:在最终确定应用程序之前,删除通过beginTransaction存在的最后一个片段并提交。错误已经停止发生。
我认为我的解决方案可能会给你一些想法。