迁移到AndroidX - 无法导入/找到androidx.databinding.DatabindingUtil

12

我正在开发一款Android MVVM应用程序。我刚刚手动切换到了androidx库。以下是我的build.gradle文件中使用的库:

implementation 'com.google.code.gson:gson:2.8.5'
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.0.0-rc02'
implementation 'androidx.constraintlayout:constraintlayout:1.1.0'
implementation 'androidx.legacy:legacy-support-v4:1.0.0-rc02'
implementation 'com.google.android.material:material:1.0.0-rc01'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test:runner:1.1.0-alpha4'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha4'
implementation 'com.airbnb.android:lottie:2.5.5'
implementation 'androidx.recyclerview:recyclerview:1.0.0-rc02'
implementation 'androidx.lifecycle:lifecycle-extensions:2.0.0-rc01'
implementation 'androidx.lifecycle:lifecycle-viewmodel:2.0.0-rc01'
implementation 'androidx.lifecycle:lifecycle-livedata:2.0.0-rc01'
implementation 'androidx.lifecycle:lifecycle-runtime:2.0.0-rc01'
implementation "androidx.lifecycle:lifecycle-common-java8:2.0.0-rc01"
implementation "androidx.lifecycle:lifecycle-reactivestreams:2.0.0-rc01"
testImplementation "androidx.arch.core:core-testing:2.0.0-rc01"
implementation "androidx.room:room-runtime:2.0.0-rc01"
annotationProcessor "androidx.room:room-compiler:2.0.0-rc01"
implementation "androidx.room:room-rxjava2:2.0.0-rc01"
implementation 'com.github.bumptech.glide:glide:4.8.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.8.0'
我已经更改了代码和布局文件以及任何导入等内容。Gradle可以成功编译。
在我的MainActivity中,我有以下代码:
viewModel = ViewModelProviders.of(this).get(MainViewModel.class);
binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
binding.setVariable(BR.viewModel, viewModel);
binding.setLifecycleOwner(this);

这是我MainActivity中唯一一个不显示androidx版本的包:

import android.databinding.DataBindingUtil;

其他每个包都显示了自己的androidx版本。当我删除导入时,我只能选择android版本而不能选择androidx

binding.setLifecycleOwner(this);处出现错误。这是因为DatabindingUtil仍然引用android.databinding包而不是androidx.databinding包。我的Android Studio告诉我传递给setLifecycleOwner方法的参数必须是anndroid.arch.lifecycle.LifecycleOwner类型。

我不知道为什么无法导入androidx.databinding.DatabindingUtil包。有人知道如何解决这个问题吗?

我尝试了重新构建和使缓存无效并重启。

3个回答

13

我错过了它。

android {
    dataBinding {
        enabled = true
    }
}

哈,我把ViewBinding和Databinding搞混了。 - TheRealChx101

11
问题在于我尝试手动完成它。所以我升级到了Android Studio 3.2 RC 2。 之后,我使用了Android Studio的迁移功能。
要在Android Studio中使用迁移功能,请转到> Refactor> 迁移到AndroidX...。
在此之后,如果Android Studio给您报错,请尝试重新构建或者使用>文件>使缓存无效并重新启动。
如@cchcc所指出的,请不要忘记将此添加到您的gradle.properties:
android.useAndroidX=true
android.enableJetifier=true

似乎最近的AS在执行“迁移到AndroidX”时会自动更新gradle.properties文件,因此无需手动干预。 - Marcin Orlowski
1
这真让我头痛,结果发现项目最初是非迁移的,我们手动在Gradle中添加了所需的实现内容。添加后问题得到了解决。 - Peterdk
@476rick,你能否添加一下,如果你(或者Android Studio)最终将导入语句import android.databinding.DataBindingUtil;更改为其他内容了吗?我遇到了相同的错误信息,但是我找不到命名空间androidx.databinding...。你最终是否进行了更改呢? - Bruno Bieri
1
@BrunoBieri 正确的导入方式是:import androidx.databinding.DataBindingUtil; 我不记得是 Android Studio 自动导入的还是我手动导入的。您可以尝试重新构建或者使缓存失效后重启。 - 476rick

6
  1. 请确保您正在使用Android Studio 3.2 RC 2版本

  2. gradle.properties文件中添加以下2行代码:

    android.useAndroidX=true
    android.enableJetifier=true


1
谢谢,我刚刚通过新的Android Studio 3.2 RC2修复了它。重要的是要使用>重构>迁移到AndroidX...进行操作。 - 476rick

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接