【问题标题】:Not able to add the fragments using Kotlin Extension function [duplicate]无法使用 Kotlin 扩展功能添加片段 [重复]
【发布时间】: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


【解决方案1】:

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

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

我所做的是:在完成应用程序之前,通过 beginTransaction 删除最后一个片段并提交。并且错误已停止发生。

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

【讨论】:

    猜你喜欢
    • 2019-05-17
    • 2016-04-18
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 2011-12-30
    • 2015-09-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多