web-dev-qa-db-ja.com

Dagger 2を使用したAndroidxフラグメントの注入

ダガー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.FragmentFragmentに変更すると、このエラーは発生しなくなります。

10

Androidxはまだサポートされていませんが、jetifierを有効にすると問題が解決する可能性があります。

gradle.propertiesに次のコードを追加するだけです

Android.useAndroidX=true
Android.enableJetifier=true

詳細については、次の問題も参照してください。

11
Saeed Masoumi

AndroidXの短剣サポートが欠落していました。バージョン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"

これとは別に、初めて使用してサポートからAndroidXに移行する場合は、gradle.properties @Saeed Masoumiが述べたように。以下を追加する必要があります-

Android.useAndroidX=true
Android.enableJetifier=true

Jetifierは、実行時にsupportライブラリからAndroidXパッケージに移行するのに役立ちます時間。そのための最良の答えはここで見つけることができます- https://stackoverflow.com/a/52002285/842607

5
Jimit Patel

前に提案したように、以下のコードをgradle.propertiesに追加します

Android.useAndroidX = true
Android.enableJetifier = true

そして、フラグメントに注入しようとしている場合は、AndroidInjection.inject(this)AndroidSupportInjection.inject(this)に置き換える必要があります

3
cherif

次は私のために働いた:

最初に、サポートライブラリの短剣にgradle依存関係を追加します。

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

次に、androidx.fragmentの子であるフラグメントに、次の方法で注入します。

AndroidSupportInjection.inject(this)
2

jetifierがsupport packagesandroidxパッケージに変更しない場合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ツールはAndroidStudioのライブラリを変換していませんでした。手動でやらなければなりませんでした。

0
mallaudin