不能使用Kotlin扩展function添加片段
我有一个Kotlin扩展function来添加另一个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() }
但是,每当我使用该扩展function添加一个片段,然后我得到这个崩溃
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v4.app.Fragment.setNextAnim(int)' on a null object reference
我正在使用这样的扩展function:
MyFragment().addFragment("MyFragment", R.id.frame, fragmentMaganer)
上述语句后,如果我试图调试我的代码,那么它的执行成功,直到
fragmentTransaction.commit()
但在此之后,在我的activity的onStart()方法,我面临着这个NullPointerException问题
但是,如果我直接在Activity中使用相同的代码:
val myFragment = MyFragment() val fragmentTransaction = fragmentManager.beginTransaction() fragmentTransaction.add(R.id.frame, myFragment, tag) fragmentTransaction.addToBackStack(tag) fragmentTransaction.commit()
那么它的工作正常。 有人可以解释为什么它没有使用扩展function ?
我也有同样的问题,当我创建一个单独的函数来实例化和最终化片段。
但是,当我的应用程序退出时,我并没有创建最后一个事务来删除剩余的片段。
我做的是这样的:在完成应用程序之前,通过beginTransaction删除最后一个片段并提交。 错误已经停止。
我想我的解决方案可能会给你一些想法。
据我所知,
fragmentManager 。 beginTransaction() ;
在与这个FragmentManager关联的碎片上开始一系列的编辑操作。
所以你需要在添加任何片段之前执行这个任务。
要执行诸如添加或移除代码片段之类的事务,您必须使用FragmentManager创建一个FragmentTransaction ,它提供了添加,删除,替换和执行其他代码片段事务的API。