使用Dagger 2注入Androidx片段

时间:2018-08-13 17:30:28

标签: android dependency-injection dagger-2 dagger

我想用匕首2注入我的Androidx片段。在我的活动中,我有:

  public class MainActivity extends AppCompatActivity implements HasSupportFragmentInjector
{
    @Inject Reposetory reposetory;
    @Inject DispatchingAndroidInjector<androidx.fragment.app.Fragment> dispatchingAndroidInjector;
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


    }

    @Override
    public AndroidInjector<androidx.fragment.app.Fragment> supportFragmentInjector()
    {
        return dispatchingAndroidInjector;
    }
}

问题是当我要构建项目时出现此错误:

error: cannot find symbol class MapBuilder

并且当我在DispatchingAndroidInjector中将 androidx.fragment.app.Fragment 更改为 Fragment 时,我不再收到此错误。

5 个答案:

答案 0 :(得分:11)

尚不支持Androidx,但是启用jetifier也许可以解决您的问题。

只需将以下代码添加到您的gradle.properties

android.useAndroidX=true
android.enableJetifier=true

另请参阅以下问题:

答案 1 :(得分:3)

如之前所建议的,将以下代码添加到gradle.properties

  

android.useAndroidX = true
  android.enableJetifier = true

如果您要插入片段,则必须将AndroidInjection.inject(this)替换为AndroidSupportInjection.inject(this)

答案 2 :(得分:1)

AndroidX缺少Dagger支持。它是为版本2.21及更高版本添加的

因此您可以将其用作-

implementation 'com.google.dagger:dagger:2.21'
implementation 'com.google.dagger:dagger-android:2.21'
implementation 'com.google.dagger:dagger-android-support:2.21'
kapt "com.google.dagger:dagger-compiler:2.21"
kapt "com.google.dagger:dagger-android-processor:2.21"

答案 3 :(得分:0)

如果 jetifier 没有将s 支持包更改为 androidx 包。您可以从here下载jetifier工具,并使用以下命令手动转换 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工具未在AndroidStudio中转换库。   我必须手动进行。

答案 4 :(得分:0)

以下对我有用:

首先,在支持库的匕首中添加gradle依赖项:

implementation "com.google.dagger:dagger-android-support:2.23.2"

然后以以下方式在片段中插入 androidx.fragment 的子代:

AndroidSupportInjection.inject(this)