Несоответствие типов при попытке объявить собственный шрифт - PullRequest
0 голосов
/ 08 мая 2020

При использовании нестандартного шрифта во фрагменте настроек, какой контекст необходимо использовать в этом сценарии? Я знаю, что this нужно изменить, но мне не удалось найти соответствующих руководств по этому поводу.

Несоответствие типов. Обязательно: Контекст. Найдено: SettingsFragment

class SettingsFragment : PreferenceFragmentCompat() {
    override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
        addPreferencesFromResource(R.xml.preferences)
    }

    private val mTypeface = ResourcesCompat.getFont(this, R.font.open_dyslexic_regular)
}

Ответы [ 2 ]

1 голос
/ 08 мая 2020

В отличие от действий, фрагменты не являются подклассами контекста. Вы увидите множество руководств по Android, где this передается в качестве аргумента контекста некоторой функции, и это потому, что они вызывают этот код изнутри Activity, а не из фрагмента.

Фрагменты имеют context свойство, которое вы можете использовать, но оно равно null до того, как фрагмент будет присоединен к Activity (например, когда класс инициализирован) и после его отсоединения.

Вы можете использовать свойство lazy делегат, поэтому контекст не будет нулевым при вызове функции getFont. Но если вы это сделаете, не обращайтесь к свойству из обратного вызова, который может быть вызван после отсоединения фрагмента.

private val mTypeface by lazy { ResourcesCompat.getFont(requireContext(), R.font.open_dyslexic_regular) }
0 голосов
/ 08 мая 2020

Во фрагменте вы можете вызвать getContext или getActivity вместо того, чтобы передать это при получении пользовательского шрифта. Но ваш код будет cra sh, потому что, когда фрагмент не прикреплен к контексту хоста, равен нулю, попробуйте изменить

private val mTypeface : Typeface get() = ResourcesCompat.getFont(requireContext(), R.font.open_dyslexic_regular)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...