如何从软件包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中的片段
在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中转换库。我不得不手动完成。
将以下代码添加到gradle.properties中
android.useAndroidX =真 android.enableJetifier =真
如果你想注入片段,你必须用AndroidInjection.inject(this)
替换AndroidSupportInjection.inject(this)
将以下内容添加到gradle.properties文件中
android.useAndroidX = true
android.enableJetifier = true
我有类似的错误,这是由于Dagger版本。在版本2.17上有一个奇怪的问题,但如果你回滚到版本2.16它完全编译(除了保罗发布的gradle.properties上的标志)。
从那里使用教程你不会有麻烦。忘记在我的项目中提到我有非androidX版本的所有内容,然后我运行android studio提供的androidX迁移,之后我不得不切换Dagger版本,但我想如果你从一开始就做一样的。
希望这有帮助,如果你切换它不起作用,发布一点你的匕首实现和插件版本,我会尝试帮助更多!
仅供参考。我有同样的问题。这是Jetifier的问题。请将您的gradle构建工具插件升级到3.3.0
classpath 'com.android.tools.build:gradle:3.3.0'
这就是我为Dagger 2.21使用androidx
命名空间所做的工作
jetifier
工具:https://developer.android.com/studio/command-line/jetifierbin
文件夹的终端DaggerFragment
这样的类来检查存储文件的路径,对我来说(在MacOS中)是这样的:./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
文件夹中build.gradle
文件并更改此行
implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar'])
在include数组中添加, '*.aar'
部分dagger-android-support-2.21.aar
从bin
移动到项目内的libs
文件夹中。implementation "com.google.dagger:dagger-android-support:2.21
中删除(或注释)此行
现在你可以继续使缓存无效并重建项目,现在DaggerFragment
将指向你使用androidx.fragment.app.Fragment
的转换版本注意:显然这是一个临时的解决方法,你应该尽快转到官方版本,这是在Dagger中修复的