dagger android支持androidx.fragment

问题描述 投票:13回答:6

如何从软件包androidx.fragment.app.Fragment中注入一个片段?

我正在使用dagger-android framework在我的代码中注入我的依赖项。

正如文档所说,我这样做是为了注入我的片段

@Override
public void onAttach(Activity activity) {
    AndroidInjection.inject(this);
    super.onAttach(activity);
    // ...
}

问题是AndroidSupportInjection类只接受android.support.v4.app.Fragment包的片段,或者如果我使用AndroidInjection类只接受android.app.Fragment包的片段,我想使用androidx.fragment的片段。 app.Fragment包。

此外,DaggerFrament从android.support.v4.app.Fragment扩展,并希望使用来自androidx的片段

如果我尝试实现HasSupportFragmentInjector,这个接口也使用android.support中的片段

dagger-2 androidx dagger
6个回答
2
投票

在HasFragmentInjector的情况下,我遇到了同样的问题。您需要使用HasSupportFragmentInjector进行片段注入。这是因为,HasFragmentInjector使用不受android.app.Fragment影响的jetifier。您需要添加android-dagger-support库,jetifier将所有支持包转换为Studio 3.3中的androidx(如果启用了jetifier)。

如果jetifier没有将支持包更改为androidx包。您可以从jetifier下载here工具,并使用以下命令手动转换android-dagger-support.aar文件。

./jetifier-standalone -i dagger-android-support-<version>.aar -o <output-name>

然后将库添加到项目中。这是转换后的HasSupportFragment类

import androidx.fragment.app.Fragment;
import dagger.android.AndroidInjector;

public interface HasSupportFragmentInjector {
    AndroidInjector<Fragment> supportFragmentInjector();
}

不知何故,jetifier工具没有在Android Studio中转换库。我不得不手动完成。


1
投票

将以下代码添加到gradle.properties中

android.useAndroidX =真 android.enableJetifier =真

如果你想注入片段,你必须用AndroidInjection.inject(this)替换AndroidSupportInjection.inject(this)


0
投票

将以下内容添加到gradle.properties文件中

android.useAndroidX = true
android.enableJetifier = true

0
投票

我有类似的错误,这是由于Dagger版本。在版本2.17上有一个奇怪的问题,但如果你回滚到版本2.16它完全编译(除了保罗发布的gradle.properties上的标志)。

从那里使用教程你不会有麻烦。忘记在我的项目中提到我有非androidX版本的所有内容,然后我运行android studio提供的androidX迁移,之后我不得不切换Dagger版本,但我想如果你从一开始就做一样的。

希望这有帮助,如果你切换它不起作用,发布一点你的匕首实现和插件版本,我会尝试帮助更多!


0
投票

仅供参考。我有同样的问题。这是Jetifier的问题。请将您的gradle构建工具插件升级到3.3.0

        classpath 'com.android.tools.build:gradle:3.3.0' 

示例代码:https://github.com/jega-ms/android-dagger2-mvp-rx


0
投票

这就是我为Dagger 2.21使用androidx命名空间所做的工作

  1. 从这里下载了jetifier工具:https://developer.android.com/studio/command-line/jetifier
  2. 解压缩到一个文件夹并打开指向提取的bin文件夹的终端
  3. 在Android Studio中,打开像DaggerFragment这样的类来检查存储文件的路径,对我来说(在MacOS中)是这样的:enter image description here
  4. 从终端执行此命令(替换为正确的变量和路径) ./jetifier-standalone -i /Users/{YOUR_USER}/.gradle/caches/{PATH_TO_DAGGER_ANDROID_SUPPORT_FOLDER}/dagger-android-support-2.21.aar -o dagger-android-support-2.21.aar 转换后的dagger-android-support-2.21.aar将出现在您的bin文件夹中
  5. 现在打开你的应用程序build.gradle文件并更改此行 implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar']) 在include数组中添加, '*.aar'部分
  6. 将生成的dagger-android-support-2.21.aarbin移动到项目内的libs文件夹中。
  7. 从依赖项implementation "com.google.dagger:dagger-android-support:2.21中删除(或注释)此行 现在你可以继续使缓存无效并重建项目,现在DaggerFragment将指向你使用androidx.fragment.app.Fragment的转换版本

注意:显然这是一个临时的解决方法,你应该尽快转到官方版本,这是在Dagger中修复的

© www.soinside.com 2019 - 2024. All rights reserved.