ちょうど開始Dagger2にはとても新しいです。私はこのようなものを達成したいが、成功はしない。ここでDagger2どのように@異なる2つの実装を持つ1つのタイプを提供する
私のモジュールは
@Module
public class UtilModule
{
@Provides
@Named("fragmentUtilActivity")
public FragmentUtils providesFragmentUtilForActivity(Context context)
{
return new FragmentUtils(context);
}
@Provides
@Named("fragmentUtilFragment")
FragmentUtils providesFragmentUtilForFragment(Fragment fragment)
{
return new FragmentUtils(fragment);
}
}
であり、これは私のコンポーネント
@Component(modules = UtilModule.class)
public interface UtilComponent
{
@Named("fragmentUtilActivity")
FragmentUtils fragmentUtilsActivity(Context context);
@Named("fragmentUtilFragment")
FragmentUtils fragmentUtilsFragment(Fragment fragment);
}
であり、これは私が欲しいもの、私のFragmentUtil
クラス
package myms.utils;
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentTransaction;
import android.content.Context;
import javax.inject.Inject;
import myms.R;
public class FragmentUtils
{
private Context context;
private Fragment hostFragment;
public FragmentUtils(Context context)
{
this.context = context;
}
public FragmentUtils(Fragment hostFragment)
{
this.hostFragment = hostFragment;
}
public void addFragment(Fragment fragment, boolean addToBackStack)
{
FragmentTransaction transaction = ((Activity) context).getFragmentManager()
.beginTransaction();
transaction.add(R.id.fragment_container, fragment, null);
if(addToBackStack)
{
transaction.addToBackStack(null);
}
transaction.commit();
}
public void addNestedFragment(Fragment fragment, boolean addToBackStack)
{
FragmentTransaction transaction = hostFragment.getChildFragmentManager().beginTransaction();
transaction.add(R.id.nested_fragment_container, fragment, null);
if(addToBackStack)
{
transaction.addToBackStack(null);
}
transaction.commit();
}
public void replaceNestedFragment(Fragment fragment, boolean addToBackStack)
{
FragmentTransaction transaction = hostFragment.getChildFragmentManager().beginTransaction();
transaction.replace(R.id.nested_fragment_container, fragment, null);
if(addToBackStack)
{
transaction.addToBackStack(null);
}
transaction.commit();
}
}
がfragmentUtilsのインスタンスを使用することです2つの異なる実装で1つはアクティビティ用であり、もう1つはフラグメント用です。私が間違っていることを教えてください。
また、@Componentインターフェイスのvoid injection(SomeClass)の目的を理解してください。
よろしく
いずれか.......? –
エラーが表示されますか?あなたが直面している正確な問題の説明を含めてください。 –
'FragmentUtils'は2つの異なるクラスのように見えます。一つはホストフラグメントで動作し、もう一つはアクティビティで動作します。 2組のメソッドがあり、間違ったものを呼び出すとNullPointerExceptionが発生します。これは、このコードを2つの異なるクラスに分割する必要があることを示す_really_強い兆候です。 –