无法访问“FavoriteBottomDialogFragment”的超类型“androidx.lifecycle.HasDefaultViewModelProviderFactory”。检查你的模块
Posted
技术标签:
【中文标题】无法访问“FavoriteBottomDialogFragment”的超类型“androidx.lifecycle.HasDefaultViewModelProviderFactory”。检查你的模块分类【英文标题】:Cannot access 'androidx.lifecycle.HasDefaultViewModelProviderFactory' which is a supertype of 'FavoriteBottomDialogFragment'. Check your module cla 【发布时间】:2020-09-28 19:43:27 【问题描述】:我在扩展 BottomSheetDialogFragment 的整个类中遇到错误
Cannot access 'androidx.lifecycle.HasDefaultViewModelProviderFactory' which is a supertype of 'FavoriteBottomDialogFragment'. Check your module classpath for missing or conflicting dependencies
该类在 app 模块中,该模块实现了另外两个模块:core 和presentation-core
build.gradle
dependencies
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation project (':core')
implementation project (':presentation-core')
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.41"
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.core:core-ktx:1.2.0'
testImplementation 'junit:junit:4.12'
implementation "com.google.android.material:material:1.1.0"
//Rx
implementation "io.reactivex.rxjava2:rxandroid:2.1.1"
implementation "io.reactivex.rxjava2:rxjava:2.2.9"
//Architecture component
implementation 'androidx.lifecycle:lifecycle-extensions:2.0.0'
implementation 'androidx.room:room-runtime:2.0.0'
kapt 'androidx.room:room-compiler:2.0.0'
kapt 'androidx.lifecycle:lifecycle-common-java8:2.0.0'
implementation 'androidx.room:room-rxjava2:2.0.0'
implementation 'androidx.room:room-guava:2.0.0'
implementation 'androidx.recyclerview:recyclerview:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
核心依赖
dependencies
api fileTree(dir: 'libs', include: ['*.jar'])
api "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.61"
api "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.4"
api 'org.jetbrains.kotlinx:kotlinx-coroutines-test:1.3.2'
//library to serialize Java Objects between Contexts
implementation 'org.parceler:parceler-api:1.1.11'
kapt 'org.parceler:parceler:1.1.11'
//testing dependencies
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
testImplementation "org.mockito:mockito-core:2.24.5"
androidTestImplementation "org.mockito:mockito-android:2.24.5"
//architecture component
implementation "androidx.lifecycle:lifecycle-extensions:2.0.0"
implementation "androidx.lifecycle:lifecycle-livedata:2.0.0"
//RxJava2
implementation "io.reactivex.rxjava2:rxjava:2.2.9"
implementation "io.reactivex.rxjava2:rxandroid:2.1.1"
演示核心
dependencies
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.61"
implementation 'androidx.appcompat:appcompat:1.0.2'
implementation 'androidx.core:core-ktx:1.0.2'
BottomSheetDialogFragment
即使出现错误,我也可以在设备中运行项目
【问题讨论】:
我也遇到过这种情况。某处的检查或 Lint 规则中存在错误。我提交了a bug report,谷歌拒绝了。对于一些书籍样本,我最终升级到appcompat
的最新预发布 1.2.0 版本以解决这个问题。
是的,好像是这样的。将appcompat
和com.google.android.material:material
升级到1.3.0-alpha01
修复问题
我还通过将appcompat
升级到最新版本1.3.0-rc01
来消除此错误消息。但是,我不必升级 material
库。
【参考方案1】:
我今天遇到了同样的问题,并且能够解决。
原来问题是“失败”类所在的模块使用的androidx.lifecycle:lifecycle-viewmodel
的预期版本与其他一些依赖代码中的更高版本 版本之间的版本不匹配。
所以在我的例子中,我的模块使用的是该模块的版本 2.1.0,但其中一个依赖项使用的是版本 2.2.0。代码编译不会有问题,因为 gradle 将依赖解析为最新版本;然而,Android Studio 不知何故被这种情况弄糊涂了(并非总是如此,因为这种情况并非一直发生,但有时——这不是我第一次看到这种情况。)
因此解决方案是:找出该库的最新版本在您的应用中,并更新您的 build.gradle
以使该模块指向 gradle 正在解析的相同版本。或者:
-
运行
gradlew app:dependencies
搜索结果为lifecycle-viewmodel
在您的应用中更新 build.gradle
以依赖 lifecycle-viewmodel
使用 gradle 表示它正在解析的版本
将项目与 gradle 文件同步
【讨论】:
另外值得注意的是,我能够将其回切换到 2.1.0 并且问题没有出现。【参考方案2】:在我的情况下(一个 Android 模块),Android Studio 4.0.1,我在 IDE 中收到许多与 androidx.lifecycle.HasDefaultViewModelProviderFactory 相关的警告, 我已经通过将此行添加到 build.gradle 解决了这个问题:
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
因此 build.gradle 的开头变为:
implementation fileTree(dir: "libs", include: ["*.jar"])
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
...
【讨论】:
【参考方案3】:在我的情况下,在问题类的模块中添加生命周期视图模型依赖项解决了问题。
【讨论】:
【参考方案4】:使用实际版本将依赖项添加到您的 build gradle androidx.fragment:fragment-ktx:x.x.x
中。对于活动,您必须添加androidx.activity:activity-ktx:x.x.x
。我希望这对您有所帮助,就我而言,它解决了问题。
【讨论】:
【参考方案5】:我将以下几行添加到 build.gradle 以解决模块中的相同问题:
def archLifecycleVersion = '2.2.0'
implementation "androidx.lifecycle:lifecycle-extensions:$archLifecycleVersion"
kapt "androidx.lifecycle:lifecycle-compiler:$archLifecycleVersion"
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$archLifecycleVersion"
【讨论】:
以上是关于无法访问“FavoriteBottomDialogFragment”的超类型“androidx.lifecycle.HasDefaultViewModelProviderFactory”。检查你的模块的主要内容,如果未能解决你的问题,请参考以下文章