【问题标题】:How do i get Activity instead of FragmentActivty?我如何获得 Activity 而不是 FragmentActivty?
【发布时间】:2018-10-16 12:03:44
【问题描述】:

片段内的getActivity(kotlin:活动)给了我FragmentActivity。但是现在我需要 Activity 而不是 FragmentActivity 用于特定的侦听器,并且不可能将其转换为 Activity。

【问题讨论】:

  • 每个FragmentActivity 都是Activity,就像每个工程师都是人一样。
  • 但是如果我通过 FragmentActivity 而不是活动,我用于注册的 firebase 侦听器会引发错误
  • 没人知道你在做什么,你在用什么。您应该提到它,以及 它抛出了哪个错误
  • 对不起,伙计们。该错误与 kotlin null 安全运算符有关,而不是错误的类型。类型不匹配:推断类型是 FragmentActivity?但预计会有活动

标签: android android-fragments android-activity android-fragmentactivity


【解决方案1】:

对于任何其他人都可能有这个问题。 只需添加! (活动!!)

【讨论】:

  • 刚刚尝试过,Android Studio 建议现在使用 requireActivity()
【解决方案2】:

FragmentActivity 类扩展了 Activity 类。

因此,如果有任何事情需要 Activity,您始终可以简单地传递对 FragmentActivity 的引用。

如果您的代码仍然无法正常工作,那么这不是问题所在。如果是这样,您需要发布更多信息,以便我们能够为您提供帮助。

【讨论】:

    【解决方案3】:

    使用

    (activity as AppCompatActivity)
    

    requireActivity()   //to getActivity
    requireContext()    //to getContext
    

    【讨论】:

    • 根据 IDE,这应该像 requireActivity() 所说的那样解决
    【解决方案4】:

    只要确保您传递了FragmentActivity 而不是FragmentActivity?,或者在参数中使其成为可选。我会解释原因,这里有一个例子:

    // call somewhere in Fragment
     myFunc(activity)
    

    方法:

    fun myFunc(activity: Activity?) {
        // doing smth
    }
    

    我们将Activity? 设置为可选,因为片段类是Java 类,而Kotlin 假设它可能为空(片段保持对活动的引用为可空)。所以这就是你有Type mismatch 异常的原因。

    【讨论】:

      【解决方案5】:

      你可以这样做

      activity as Activity
      

      activity!!
      

      【讨论】:

        【解决方案6】:

        通过requireActivity()

        正如 Moonbloom 指出的那样,FragmentActivity Activity

        如果您仔细查看您的错误,您会发现问题在于,当函数需要 not null Activity 时,您传递了 FragmentActivity?

        【讨论】:

          猜你喜欢
          • 2019-03-23
          • 2014-04-15
          • 2017-03-25
          • 1970-01-01
          • 2017-03-04
          • 2012-09-22
          • 1970-01-01
          • 1970-01-01
          • 2012-07-28
          相关资源
          最近更新 更多