Я передаю свой собственный объект sub
, у которого есть свойство цвета, из одного действия в другое и получаю его следующим образом:
val intent = this.intent
val bundle = intent.extras
sub = bundle.getParcelable("selected")
затем, когда нажимается кнопка, появляется палитра цветов и позволяет мне выбрать цвет, у меня есть этот метод, который прослушивает выбор цвета:
override fun onColorSelected(dialogId: Int, color: Int) {
sub.color = color
createsub_rel.backgroundColor = color
}
как вы можете видеть, цвет возвращается как Int.
Исключения происходят в onBindViewHolder()
моего RecyclerView, особенно в этой строке:
viewHolder.relativeLayout.setBackgroundColor(mContext.getColor(sub.color))
в журнале указано:
android.content.res.Resources$NotFoundException: Resource ID #0x7fff9800
Я отладил его, и sub.color
на самом деле является ожидаемым значением, я искал здесь SO для решения, в частности, это, но я не смог найти никакого рабочего ответа.
@Pawel да, это происходит на viewHolder.relativeLayout.setBackgroundColor(mContext.getColor(sub.color)
, хотя не совсем понял ваш первый вопрос, я получаю значение для отображения его в recyclerView
Context.getColor(int)
используется для разрешения цвета из таких ресурсов, как R.color.colorAccent
, вы не должны передавать значение ARGB в качестве аргумента.
@Pawel да, я думаю, что это все, мне нужно выяснить способ различать два случая, потому что обычно я получаю цвета из ресурсов, а не тогда, когда я его меняю, мне нужно создать отдельный адаптер или как могу я отличить эти два случая
Если вы можете изменить структуру sub
, вы можете добавить поле, указывающее формат цвета, и добавить блок if (...)
в свой метод привязки или обернуть цвет в пользовательский объект, который имеет метод getColor(context)
.
@Pawel В этом есть смысл, я так и сделаю, спасибо за помощь!
Почему вы разрешаете colorResourceId, когда у вас уже есть значение цвета?
...setBackgroundColor(sub.color)
не работает?