Dagger 2 android对象null

时间:2015-11-26 12:20:19

标签: android inject dagger-2

我有一个自定义类Fragment AFragment,它有一个注入属性:AController controller。

问题是当我这样称呼:controller.onStart() - > controller为null。

代码:

类AFragment:

public class AFragment extends Fragment {

@Inject
AController controller;

@Override
public void onStart() {
    super.onStart();
    controller.onStart();
}

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    controller.onCreate();
}
}

Class AController:

public class AController {


private final DataInteractor dataInteractor;

@Inject
public AController(DataInteractor dataInteractor){
    this.dataInteractor = dataInteractor;
}

public void onCreate(){

}

public void onStart(){

}
}

1 个答案:

答案 0 :(得分:0)

您唯一需要的是创建一个组件并将AFragment注入其中。

@Singleton
@Component
public interface ApplicationComponent {  
    void inject(AFragment fragment);
}

因为在AController类中你进行了一个构造函数注入,所以你不需要为你的组件创建一个模块。

还需要在应用程序启动时创建组件。所以只需在Application扩展类中初始化它。

public class DemoApplication extends Application {  
    private ApplicationComponent mComponent;

    @Override 
    public void onCreate() {
        super.onCreate();
        mComponent = DaggerApplicationComponent.builder()
                    .build();
    }

    public ApplicationComponent getComponent() { 
        return mComponent;
    }
}

最后一步是我之前说的,将AFragment注入组件。

public class AFragment extends Fragment {

@Inject
AController controller;

@Override
public void onStart() {
    super.onStart();
    controller.onStart();
}

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ((DemoApplication) getApplication()).getComponent().inject(this);
    controller.onCreate();
}
}