2017-07-14 9 views
0

私はhttps://guides.codepath.com/android/Dependency-Injection-with-Dagger-2でdagger2デモを使用しています。私は、DemoDaggerSubActivity.javaのArrayAdapterインジェクションにサブコンポーネントを使用したいと思います。Dagger2サブコンポーネントエラー - メソッドに注釈を付ける必要があります。ArrayAdapter

私Application.java

@Override public void onCreate() { 
    super.onCreate(); 

    mApplicationComponent = DaggerApplicationComponent.builder() 
      .applicationModule(new ApplicationModule(this)) 
      .build(); 
} 


public ApplicationComponent getApplicationComponent() { 
    return mApplicationComponent; 
} 

私MyActivityModule.java

@Module 
public class MyActivityModule { 
private final DemoDaggerSubActivity activity; 

// must be instantiated with an activity 
public MyActivityModule(DemoDaggerSubActivity activity) { this.activity = activity; } 

@Provides 
@MyActivityScope 
@Named("my_list") 
public ArrayAdapter providesMyListAdapter() { 
    return new ArrayAdapter<String>(activity, android.R.layout.activity_list_item); 
} 

} 

私MyActivitySubComponent.java

@MyActivityScope 
@Subcomponent(modules={ MyActivityModule.class }) 
public interface MyActivitySubComponent { 
    @Named("my_list") ArrayAdapter myListAdapter(); 
} 

私ApplicationComponent.java

@Singleton 
@Component(modules = {ApplicationModule.class}) 
public interface ApplicationComponent { 
void inject(DemoDaggerSubActivity activity); 

// factory method to instantiate the subcomponent defined here (passing in the module instance) 
MyActivitySubComponent newMyActivitySubcomponent(MyActivityModule activityModule); 

} 

私DemoDaggerSubActivity.java

@Inject @Named("my_list") 
ArrayAdapter arrayAdapter; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

((AttendanceApplication) getApplication()).getApplicationComponent().newMyActivitySubcomponent(new MyActivityModule(this)).inject(this); 

} 

プロジェクトが再構築した後、私はエラーが私の方法ArrayAdapterに注釈を付ける必要があり

enter image description here

を持っていますか?

+0

それを配置する必要がありますサブコンポーネントをグラフに追加します。したがって、エラー – Jileshl

答えて

0

はあなたが見逃しているApplicationComponent.javaから注入方法を削除し、MyActivitySubComponent.java

新しいMyActivitySubComponent.javaに

@MyActivityScope 
@Subcomponent(modules={ MyActivityModule.class }) 
public interface MyActivitySubComponent { 

    void inject(DemoDaggerSubActivity activity); 

    @Named("my_list") ArrayAdapter myListAdapter(); 
} 

新しいApplicationComponent.java

@Singleton 
@Component(modules = {ApplicationModule.class}) 
public interface ApplicationComponent { 

    // factory method to instantiate the subcomponent defined here (passing in the module instance) 
    MyActivitySubComponent newMyActivitySubcomponent(MyActivityModule activityModule); 

} 
関連する問題