Ошибка компиляции: не удается найти символ FragmentBindingImpl с пользовательскими атрибутами - PullRequest
0 голосов
/ 02 апреля 2019

У меня есть привязка данных в другом месте, и это единственное место, где оно дает мне эти проблемы, у меня нет кинжала.Если я удаляю строки в этом представлении, которые используют привязку данных, я не получаю ошибок и могу установить на свое устройство.Я пробовал каждую комбинацию перестройки / перезапуска и очистки кешей и удаления файлов сборки.Я также попытался отключить привязку данных и снова включить ее.

Вот файл макета, который я использую, он называется fragment_subscription.xml

<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
  <data>

    <variable name="fragment" type="com.example.subscription.SubscriptionFragment"/>

    <variable name="week" type="com.android.billingclient.api.SkuDetails"/>
    <variable name="month" type="com.android.billingclient.api.SkuDetails"/>
    <variable name="year" type="com.android.billingclient.api.SkuDetails"/>

  </data>

<com.example.CustomButton
                android:id="@+id/week_subscription_button"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:layout_gravity="center_vertical"
                android:padding="5dp"
                app:presetButtonPriceText="@{week.price}"
                app:presetButtonUnitText="@string/week_subscription_unit"
                app:presetButtonValueText="@string/week_subscription_value"/>

        <com.example.CustomButton
                android:id="@+id/month_subscription_button"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:layout_gravity="center_vertical"
                android:padding="5dp"
                app:presetButtonPriceText="@{month.price}"
                app:presetButtonUnitText="@string/month_subscription_unit"
                app:presetButtonValueText="@string/month_subscription_value"/>

        <com.example.CustomButton
                android:id="@+id/year_subscription_button"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:layout_gravity="center_vertical"
                android:padding="5dp"
                app:presetButtonPriceText="@{year.price}"
                app:presetButtonUnitText="@string/year_subscription_unit"
                app:presetButtonValueText="@string/year_subscription_value"/>

</layout>

Вот мои атрибуты вида, характерные для моей пользовательской кнопки

    <attr name="presetButtonUnitText" format="integer"/>
    <attr name="presetButtonPriceText" format="string"/>
    <attr name="presetButtonValueText" format="integer"/>

Вот где я создаю свой вид в SubscriptionFragment.kt

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
    return FragmentSubscriptionBinding.inflate(inflater, container, false).let {
        this.binding = it
        bind(skuDetailsList)
        it.root
    }
}

Вот где я связываю свой вид

private fun bind(skuList: MutableList<SkuDetails>) {
    binding?.let {
        if (skuList.isNotEmpty()) {
            it.week = skuList[0]
            it.month = skuList[1]
            it.year = skuList[2]
            it.fragment = SubscriptionFragment@this
        }

    }
}

Я пытался добавить эти строки в gradle своих приложений.properties

android.databinding.enableV2 = true
android.enableExperimentalFeatureDatabinding = true

Я добавил их в gradle моих приложений

kapt 'com.android.databinding:compiler:3.1.4'
kapt {
    generateStubs = true
}
configurations.all {
    resolutionStrategy {
        force 'com.android.support:support-annotations:23.1.1'
    }
}

1 Ответ

0 голосов
/ 18 апреля 2019

Здесь я привязывался к настраиваемым атрибутам и мне нужно было установить настраиваемые методы получения / установки в настраиваемом представлении, которое я надувал

РЕДАКТИРОВАТЬ:

Пример

public class ColorPicker extends View {
    private int color;

    public void setColor(int color) {
        this.color = color;
        invalidate();
    }

    public int getColor() {
        return color;
    }

//...
}

Вот чтоXML выглядит как

<com.example.myapp.ColorPicker
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:color="@{color}"/>
...