Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/196.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 尝试声明自定义字体时类型不匹配_Android_Kotlin_Android Fonts_Android Typeface - Fatal编程技术网

Android 尝试声明自定义字体时类型不匹配

Android 尝试声明自定义字体时类型不匹配,android,kotlin,android-fonts,android-typeface,Android,Kotlin,Android Fonts,Android Typeface,在设置片段中使用自定义字体时,此场景中需要使用哪个上下文?我知道这需要改变,但我找不到任何相关的教程 类型不匹配。必需:上下文。找到:设置碎片 在fragment中,您可以调用getContext或getActivity,而不是在获取自定义字体时传递它。但您的代码将崩溃,因为当未附加到主机上下文的片段为null时,请尝试更改 private val mTypeface : Typeface get() = ResourcesCompat.getFont(requireContext(), R.f

在设置片段中使用自定义字体时,此场景中需要使用哪个上下文?我知道这需要改变,但我找不到任何相关的教程

类型不匹配。必需:上下文。找到:设置碎片


在fragment中,您可以调用getContext或getActivity,而不是在获取自定义字体时传递它。但您的代码将崩溃,因为当未附加到主机上下文的片段为null时,请尝试更改

private val mTypeface : Typeface get() = ResourcesCompat.getFont(requireContext(), R.font.open_dyslexic_regular)

与活动不同,片段不是上下文的子类。您将看到许多Android教程,其中这是作为上下文参数传递给某个函数的,这是因为它们从活动内部而不是从片段调用该代码

片段有一个可以使用的上下文属性,但在片段附加到活动之前(如初始化类时和分离类后),该属性为null

private val mTypeface by lazy { ResourcesCompat.getFont(requireContext(), R.font.open_dyslexic_regular) }
您可以使用lazy属性委托,这样在调用getFont函数时上下文就不会为null。但是如果这样做,就不要从片段分离后可能调用的回调中访问属性

private val mTypeface by lazy { ResourcesCompat.getFont(requireContext(), R.font.open_dyslexic_regular) }

如果上下文当前为空,requireContext将引发异常。除非在fragment onCreate之前调用,否则不会。这意味着你的代码有错误。在这段代码中,你在onCreate之前调用它,因为它是类初始化的一部分。我已经把get放在你调用时创建的类型之后了。从来没有,我错过了。类型不匹配。必需:上下文。找到:上下文?哎呀,你可以用requireContext代替,也可以只使用上下文!!。这将返回一个不可为null的上下文,并在上下文当前为null时引发异常。但只要该属性只从生命周期方法访问,而不是从回调中访问,就不会有那么长的时间了,回调可以在片段分离时调用,就像在网络访问回调中一样。