无法生成 DataBindingClass(Impl 会生成)
Failing to generate DataBindingClass (Impl does generate)
我最近从使用 ButterKnife
切换到使用 android DataBinding
,但是其中一个 class 无法生成。
ActivityMainBindingImpl
< 生成良好。
但是ActivityMainBinding
不见了,也说明在Implclass本身找不到。
到目前为止,我已经尝试了通过多个搜索引擎在 Internet 上可以找到的所有内容。 (使缓存无效重建更新等)
也许这有点小众,我希望你们中的一些人以前遇到过它?
我有
dataBinding {
enabled = true
}
重要的是要注意我使用的是 androidx 而不是旧的支持库。
它可能在某处悄无声息地失败了,但我已经在我的布局文件中使用和不使用任何 <data>
元素进行了尝试。
我还用 <layout>
正确包装了我的布局,如下所示:
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
似乎很奇怪它可以生成 Impl class 很好,但另一个不存在。
我也进入了生成它的文件夹,只有 Impl class 可见。
完整 XML 布局
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".presentation.activities.MainActivity"
tools:layout_editor_absoluteY="25dp">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/toolbar_container_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<include
android:id="@+id/toolbar"
layout="@layout/toolbar_layout"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<ScrollView
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/toolbar_container_layout">
<!-- This is a comment #001C40 -->
<LinearLayout
android:id="@+id/scroll_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/dashboard"
android:layout_width="match_parent"
android:layout_height="700dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/toolbar_container_layout">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/dashboard_header"
android:layout_width="0dp"
android:layout_height="100dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/logo_container"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<ImageView
android:id="@+id/facta_logo"
android:layout_width="0dp"
android:layout_height="0dp"
android:adjustViewBounds="true"
android:scaleType="fitCenter"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.0"
app:srcCompat="@drawable/facta_logo" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.gridlayout.widget.GridLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:horizontalSpacing="16dp"
android:verticalSpacing="16dp"
app:columnCount="2"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/dashboard_header"
app:rowCount="4">
<include layout="@layout/dashboard_card" />
<include layout="@layout/dashboard_card" />
<include layout="@layout/dashboard_card" />
<include layout="@layout/dashboard_card" />
<include layout="@layout/dashboard_card" />
<include layout="@layout/dashboard_card" />
</androidx.gridlayout.widget.GridLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout>
</ScrollView>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
错误是
Cannot resolve symbol 'ActivityMainBinding'
我的 XML 布局是 activity_main.xml
您是否试过像这样添加数据标签?
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<variable
name="viewmodel"
type="com.myapp.data.ViewModel" />
</data>
<ConstraintLayout... /> <!-- UI layout's root element -->
</layout>
如果我省略数据标签,至少我的绑定 类 会搞砸,尽管重新启动 Android Studio 有时也会产生奇怪的效果。
(抱歉,我更愿意将此问题添加为评论,但我没有足够的声誉)
我很纳闷
问题是我的布局文件结构在子文件夹中。
这是一个技巧,您可以通过 Gradle 更改 sourceSets,从而使您拥有一个有组织的布局文件夹(将片段与活动等分开)。因为我有 100 多个布局文件,所以这对我来说很有意义。
不幸的是,它不是很标准,而且显然对于 dataBinding 和 viewBinding 的工作来说太混乱了。
不要这样做:
sourceSets {
main {
//Tried to make it a bit more organized
res.srcDirs =
[
'src/main/res/layouts/activities',
'src/main/res/layouts/adapters',
'src/main/res/layouts/components',
'src/main/res/layouts/forms',
'src/main/res/layouts/fragments',
'src/main/res/layouts/lists',
'src/main/res/layouts',
'src/main/res'
]
}
}
这是一个非常小众的问题。
我最近从使用 ButterKnife
切换到使用 android DataBinding
,但是其中一个 class 无法生成。
ActivityMainBindingImpl
< 生成良好。
但是ActivityMainBinding
不见了,也说明在Implclass本身找不到。
到目前为止,我已经尝试了通过多个搜索引擎在 Internet 上可以找到的所有内容。 (使缓存无效重建更新等) 也许这有点小众,我希望你们中的一些人以前遇到过它?
我有
dataBinding {
enabled = true
}
重要的是要注意我使用的是 androidx 而不是旧的支持库。
它可能在某处悄无声息地失败了,但我已经在我的布局文件中使用和不使用任何 <data>
元素进行了尝试。
我还用 <layout>
正确包装了我的布局,如下所示:
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
似乎很奇怪它可以生成 Impl class 很好,但另一个不存在。
我也进入了生成它的文件夹,只有 Impl class 可见。
完整 XML 布局
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".presentation.activities.MainActivity"
tools:layout_editor_absoluteY="25dp">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/toolbar_container_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<include
android:id="@+id/toolbar"
layout="@layout/toolbar_layout"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<ScrollView
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/toolbar_container_layout">
<!-- This is a comment #001C40 -->
<LinearLayout
android:id="@+id/scroll_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/dashboard"
android:layout_width="match_parent"
android:layout_height="700dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/toolbar_container_layout">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/dashboard_header"
android:layout_width="0dp"
android:layout_height="100dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/logo_container"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<ImageView
android:id="@+id/facta_logo"
android:layout_width="0dp"
android:layout_height="0dp"
android:adjustViewBounds="true"
android:scaleType="fitCenter"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.0"
app:srcCompat="@drawable/facta_logo" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.gridlayout.widget.GridLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:horizontalSpacing="16dp"
android:verticalSpacing="16dp"
app:columnCount="2"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/dashboard_header"
app:rowCount="4">
<include layout="@layout/dashboard_card" />
<include layout="@layout/dashboard_card" />
<include layout="@layout/dashboard_card" />
<include layout="@layout/dashboard_card" />
<include layout="@layout/dashboard_card" />
<include layout="@layout/dashboard_card" />
</androidx.gridlayout.widget.GridLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout>
</ScrollView>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
错误是
Cannot resolve symbol 'ActivityMainBinding'
我的 XML 布局是 activity_main.xml
您是否试过像这样添加数据标签?
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<variable
name="viewmodel"
type="com.myapp.data.ViewModel" />
</data>
<ConstraintLayout... /> <!-- UI layout's root element -->
</layout>
如果我省略数据标签,至少我的绑定 类 会搞砸,尽管重新启动 Android Studio 有时也会产生奇怪的效果。
(抱歉,我更愿意将此问题添加为评论,但我没有足够的声誉)
我很纳闷
问题是我的布局文件结构在子文件夹中。 这是一个技巧,您可以通过 Gradle 更改 sourceSets,从而使您拥有一个有组织的布局文件夹(将片段与活动等分开)。因为我有 100 多个布局文件,所以这对我来说很有意义。
不幸的是,它不是很标准,而且显然对于 dataBinding 和 viewBinding 的工作来说太混乱了。
不要这样做:
sourceSets {
main {
//Tried to make it a bit more organized
res.srcDirs =
[
'src/main/res/layouts/activities',
'src/main/res/layouts/adapters',
'src/main/res/layouts/components',
'src/main/res/layouts/forms',
'src/main/res/layouts/fragments',
'src/main/res/layouts/lists',
'src/main/res/layouts',
'src/main/res'
]
}
}
这是一个非常小众的问题。