Проблема - 1: Вы не объявили context
в своем xml
, следовательно, привязка данных показывает ошибку и не может создать ConfirmationActivityBindingImpl
Решение : Создать имя переменной context
с типом android.content.Context
<variable
name="context"
type="android.content.Context" />
И Инициализировать context
из вашего activity
.
Теперь это успешно создайте ConfirmationActivityBindingImpl
и это будет выглядеть так:
....
androidx.databinding.adapters.TextViewBindingAdapter
.setText(this.discountBonusesTextView,
discountBonusesTextView.getResources()
.getString(R.string.discount_bonuses_and_ration_lei_placeholder, 100,
discountBonusesTextView.getResources().getDimension(R.dimen.ratio_bonus)));
....
Задача - 2: Тогда это вызывает Ресурсы $ NotFoundException из-за float
измерения типа.
android .content.res.Resources $ NotFoundException: идентификатор ресурса # 0x7f060163 тип # 0x4 недопустим в android .content.res. Resources.getDimension
Если мы посмотрим внутрь getDimension
, есть проверка типов и throw
исключение, если нет TYPE_DIMENSION
if (value.type == TypedValue.TYPE_DIMENSION) {
return TypedValue.complexToDimension(value.data, impl.getDisplayMetrics());
}
throw new NotFoundException("Resource ID #0x" + Integer.toHexString(id)
+ " type #0x" + Integer.toHexString(value.type) + " is not valid");
Решение: Мы должны передать Идентификатор ресурса вместо Значение ресурса . Для этого
import
R. java внутри вашего xml
<import type="com.myproject.databinding.R"/>
- И затем передать ресурс id вроде
R.dimen.ratio_bonus
AndroidUtil.getFloatValueFromDimen(context, R.dimen.ratio_bonus)
Теперь он будет обрабатываться вашим getFloatValueFromDimen
вместо системного getDimension
и все работает нормально.