2015-11-26 6 views
0

У меня есть пользовательский класс Fragment AFragment, который имеет вложенный атрибут: контроллер ACcontroller.Dagger 2 android object null

Проблема в том, что когда я называю это: 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(); 
} 
} 

Класс аСопЬгоНег:

public class AController { 


private final DataInteractor dataInteractor; 

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

public void onCreate(){ 

} 

public void onStart(){ 

} 
} 
+0

Где вы на самом деле называете метод, который вводит инъекции? – ehehhh

+0

Я новичок в андроиде, я понятия не имею, где происходит инъекция, и не знаю, как они работают. – nematite

+0

Значит, вы не должны использовать Кинжал. Это для опытных пользователей и трудно освоить. –

ответ

0

Единственное, что вам нужно, это создать компонент и ввести AFragment в него.

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

Потому что в классе аСопЬгоНег вы делаете конструктор инъекции, так что вам не нужно, чтобы сделать модуль для компонента.

А также вам необходимо создать компонент при запуске приложения. Поэтому просто запустите его в расширенном классе приложения.

public class DemoApplication extends Application { 
    private ApplicationComponent mComponent; 

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

    public ApplicationComponent getComponent() { 
     return mComponent; 
    } 
} 

Последний шаг - это то, что я говорю раньше, вводят АФРАГЕНТ в компонент.

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(); 
} 
} 
Смежные вопросы