不能使用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。