【问题标题】:Using ContextCompat.getColor in fragment Kotlin?在片段 Kotlin 中使用 ContextCompat.getColor?
【发布时间】:2020-09-22 05:01:20
【问题描述】:

我在片段中有一个复选框,并尝试使用 ContextCompat.getColor 在其上设置文本颜色

代码

optionCb.setTextColor(ContextCompat.getColor(activity,android.R.color.white));

显示错误

required : Context 
Found : fragmentactivity

甚至用过

optionCb.setTextColor(ContextCompat.getColor(activity.applicationContext,android.R.color.white));

仍然显示错误

这里的上下文对象应该是什么?

【问题讨论】:

    标签: android kotlin checkbox colors


    【解决方案1】:

    尝试使用requiredActivityrequiredContext 而不是activity

    【讨论】:

      【解决方案2】:
      optionCb.setTextColor(ContextCompat.getColor(getContext(),android.R.color.white));
      

      【讨论】:

        【解决方案3】:

        使用 requireActivity() 可以解决

        optionCb.setTextColor(ContextCompat.getColor(requireActivity(), android.R.color.black));
        

        【讨论】:

          【解决方案4】:

          ContextCompat.getColor() 接受两个参数——第一个是非空的 Context 对象。

          如果您使用 Kotlin 编写代码,Android Studio 可能会抱怨您传递给 getColor()Context 对象是可空的。 Fragments 可用的 contextactivity 参数在 Android 中可以为空。

          正如其他人已经提到的,您可以使用requireContext() 函数。然而,虽然这将满足 Android Studio,但应谨慎使用,因为如果 Fragment 的 context 为 null(Fragment 的上下文并不总是可用),它将抛出 IllegalStateException

          如果可能的话,我的建议是在您的 xml 布局文件中设置文本颜色。如果必须以编程方式进行,最安全的方法是处理 null 情况:

              context
                  ?.let { ContextCompat.getColor(it, android.R.color.white) }
                  ?.also { optionsCb.setTextColor(it) }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-11-22
            • 1970-01-01
            • 2022-08-02
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多