无法使用Kotlin Extension函数添加片段

时间:2017-11-30 12:59:51

标签: android android-fragments kotlin kotlin-android-extensions

我有一个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()

然后它的工作正常。有人可以解释为什么它不能使用扩展功能

1 个答案:

答案 0 :(得分:0)

当我创建一个单独的函数来实例化和最终化片段时,我也遇到了同样的问题。

但是当我的应用程序退出时,我没有创建最后一个删除剩余片段的事务。

我做的是:在最终确定应用程序之前,删除通过beginTransaction存在的最后一个片段并提交。错误已经停止发生。

我认为我的解决方案可能会给你一些想法。