J'essaie d'implémenter MVP sans Dagger (à des fins d'apprentissage). Mais je me suis heurté à un problème - j'utilise Repository patter pour obtenir des données brutes soit à partir du cache (Shared Preferences), soit à partir du réseau :
Shared Prefs|
|<->Repository<->Model<->Presenter<->View
Network|
Mais pour mettre la main sur les préférences partagées, je dois placer quelque part une ligne du genre
presenter = new Presenter(getApplicationContext());
J'utilise onRetainCustomNonConfigurationInstance
/ getLastCustomNonConfigurationInstance
pour que le présentateur soit "retenu".
public class MyActivity extends AppCompatActivity implements MvpView {
@Override
protected void onCreate(Bundle savedInstanceState) {
//...
presenter = (MvpPresenter) getLastCustomNonConfigurationInstance();
if(null == presenter){
presenter = new Presenter(getApplicationContext());
}
presenter.attachView(this);
}
@Override
public Object onRetainCustomNonConfigurationInstance() {
return presenter;
}
//...
}
Comment utiliser les préférences partagées dans le MVP sans Dagger et sans que le Presenter soit dépendant du contexte ?