我有一个自定义类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(){
}
}
答案 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();
}
}