Думаю, я понял это. Я не могу гарантировать правильность ответа, но он работает.
Я изменил конструктор Presenter, и теперь я должен неявно передать правильное представление докладчику, поскольку при запуске приложения я передаю фрагмент, а неПосмотреть. Вот почему я создал метод setPresenter в интерфейсе MainView.
public MainPresenter(MainContract.MainView view, NetworkLayer networkLayer) {
this.view = view;
this.view.setPresenter(this);
this.networkLayer = networkLayer;
}
Теперь я устанавливаю NetworkLayer при запуске приложения (в MainActivity или в классе приложения). Там у меня есть доступ к контексту приложения, и я могу передать сетевой уровень без сохранения контекста в Presenter. Чтобы установить правильную связь между презентатором и моделью, я создал сеттер в NetworkLayer для передачи правильного презентатора.
MainFragment mainFragment = new MainFragment();
//Inject view and model
MainContract.MainPresenter mainPresenter = new MainPresenter(mainFragment, NetworkLayer.getInstance(getApplicationContext()));
NetworkLayer.getInstance(getApplicationContext()).setPresenter(mainPresenter);