【发布时间】:2018-01-08 05:50:24
【问题描述】:
我有一个 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()
然后它工作正常。有人可以解释一下为什么它不能与扩展功能一起使用吗?
【问题讨论】:
-
你拼错了这个
fun Fragment.addFragment()吗? -
没有@nhoxbypass 我没有
-
这不是正确使用扩展名。您所做的是创建一个片段实例只是为了使用创建另一个片段的方法。我猜你把它误认为是静态实用程序?
-
@pk4393 是的
-
如果您在
SupportFragmentManager中将扩展函数创建为SupportFragmentManager.addFragment(),则扩展函数会更有意义
标签: android android-fragments kotlin kotlin-android-extensions