In mvp salviamo il riferimento di un'attività in un riferimento debole. WeakReference<Activity> view = new WeakReference<Activity>(activity);
Se perdiamo il riferimento. possiamo riaverlo?Android MVP WeakRefrence
risposta
Se si perde il riferimento al proprio Activity
, significa che l'attività è stata raccolta e non esiste più. Non puoi recuperare ciò che non esiste.
Es. Se ciò accade a causa di modifiche alla configurazione, significa che è stato creato un nuovo activity
.
È necessario un modo per allegare la vista appena creata allo stesso relatore.
Se cerchi librerie che ti aiutino, dai un'occhiata a mosby e nucleus.
Non penso che dovresti salvare un riferimento a Activity
in MVP
- non importa se è difficile o debole!
Suppongo che stiate memorizzando questo riferimento nel Presenter
. Per disaccoppiare realmente i livelli è necessario creare un'interfaccia che descriva il tuo View
(Activity
) e utilizzarlo al posto dell'attività.
Quindi faresti:
public interface LoginView {
displayUsernameError(String error);
displayPasswordError(String error);
openMainScreen();
}
tuo Activity
dovrebbe implementare l'interfaccia dall'alto.
public class LoginActivity implements LoginView {
...
}
Nel vostro presentatore avreste:
class LoginPresenter {
private LoginView mView;
public LoginPresenter(LoginView view) {
mView = view;
}
public onLoginButtonClicked(String username, char[] password) {
...
mView.openMainScreen();
}
}
benefici immediati di fare questo:
I diversi strati sono davvero disaccoppiati. Puoi cambiare il tuo
Activity
(ad esempio, decidi di usareFragments
) senza toccare il tuoPresenter
.Il presentatore è completamente testabile solo con
JUnit
! Non è necessario utilizzare alcunché di fantasia per verificare che le interazioni siano corrette, semplicementeMockito
per simulare ilLoginView
.
Un altro punto da notare - sei sicuro che vuoi che il tuo Presenter
a sopravvivere tuo View
? Ci sono alcune situazioni in cui questo non può essere evitato, ma nella maggior parte dei casi hanno la stessa durata - quando lo View
viene distrutto dovrebbe essere lo Presenter
.
Il tuo mView è un riferimento forte di LoginActivity. – Ricardo
- 1. Implementazione MVP Android
- 2. MVP Android con RxAndroid + Retrofit
- 3. Commenti sul pattern MVP per Android
- 4. MVP Android - Quale modello presentare per visualizzare
- 5. Android MVP: utilizzo sicuro contesto in Presenter
- 6. comunica tra i presentatori nell'applicazione Android MVP
- 7. Esempio MVP GWT
- 8. in MVC/MVP
- 9. Chiarimento: MVC, MVP, MVVM
- 10. Caricamento sottoview di MVP
- 11. MVP Comunicazione tra relatori?
- 12. MVP - Quanti presentatori
- 13. GWT MVP architettura vantaggi
- 14. MVP in Winform
- 15. Android MVP aperto Attività da Presenter, anti-pattern?
- 16. MVP Android: un'attività deve essere una visualizzazione o un relatore?
- 17. MVP Android - Dove si salva lo stato di visualizzazione?
- 18. Refactoring Form.ShowDialog() code a MVP
- 19. MVP, Winforms - EventHandlers o Delegati
- 20. MVC/MVP/MVVM Che diamine?
- 21. Codice concreto Esempio di MVP
- 22. Vantaggi di MVC oltre MVP
- 23. Come utilizzare UiHandler in un pattern MVP
- 24. Webforms MVP Passive View - gestione eventi
- 25. MVP per attività con più frammenti
- 26. Refactoring WinForm ClickNCode a MVP Vista passiva
- 27. MVP disegno del modello best practice
- 28. Limita le violazioni dell'architettura - asp.net MVP
- 29. utilizzando MVC Modelli MVP in winform
- 30. Quadro MVC/MVP per applicazioni .NET WinForm
"È necessario un modo per allegare la vista appena creata" come fare? grazie mille per la tua risposta –
@MethnaniBilel è un problema complesso da risolvere ... dai un'occhiata a mosby e/o nucles per vedere come hanno risolto. – LordRaydenMK