Не могу получить ресурсы программно, используя Kotlin - PullRequest
1 голос
/ 21 февраля 2020

Я пытался программно загрузить прорисовку в моем приложении kotlin через

resources.getDrawable(R.drawable.XXX)

, и все, что я получил, было:

Method threw 'android.content.res.Resources$NotFoundException' exception.

независимо от того, какой была цель прорисовки.

Попробовав разные вещи, я наконец попробовал недавно созданный проект Kotlin, только чтобы узнать, что он тоже не работает. Затем я создал новый проект Java, и в этом все работало безупречно.

Я ничего не нашел о людях, имеющих ту же проблему в сети, я могу получить объект "Ресурсы" в обоих проектах, но это просто в Kotlin не может найти отрисовки.

Есть ли что-то, что могло бы заставить его работать, о котором я не знаю?

Редактировать: Я получаю такие ресурсы, как это во вновь созданном проекте:

override fun onResume() {
    super.onResume()

    val drawable = resources.getDrawable(R.drawable.ic_launcher_foreground)
}

Это происходит независимо от целевого ресурса, рисования, мипмапов, цветов ...

Я нахожусь на Android Studio 3.5.3 с gradle 3.5.3 и Kotlin 1.3.61, уровень API 26

Ресурсы проекта - это ресурсы, добавленные при создании проекта

Ответы [ 2 ]

0 голосов
/ 21 февраля 2020

Попробуйте это:

override fun onResume() {
    super.onResume()

        val drawable = ResourcesCompat.getDrawable(getResources(), R.drawable.ic_launcher_foreground, null)
}
0 голосов
/ 21 февраля 2020

Я нашел временное исправление, и в основном что-то очень интересное. Взяв пример «ic_launcher_background» в качестве случайного отрисовки, Java дает такой результат:

enter image description here

В то время как точный эквивалентный код в Kotlin дает нам это: enter image description here

Я не понимаю почему, но при использовании проекта, сгенерированного способом Kotlin, идентификаторы, которые можно получить с помощью R , просто не соответствуют тем, которые используются Resources class.

Так что сейчас я буду использовать метод "getIdentifier ()", чтобы исправить мою проблему, но на самом деле это не то, что вы Я хотел бы поступить естественно.

Если бы кто-то, кто лучше понимает, что здесь происходит, мог раскрыть эту тайну, это было бы очень признательно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...