我有一個應用程序實現MVP模式與Loader
維護演示者對象的視圖娛樂(有關於此here的文章)。我是Dagger 2的新手,試圖與當前代碼一起實施。匕首2與MVP,避免創建額外的主持人對象上視圖娛樂
我設法使它工作,但現在我的演示者創建了兩次。起初它是使用一個初始化在onCreateLoader
中的工廠類創建的,但是當添加Dagger 2實現時,我創建了兩個對象(工廠類和注入時)。
現在我避免在onCreateLoader
中創建一個新的演示者,而是通過注入的演示者。問題在於視圖娛樂:每當視圖被破壞並重新創建時,新的演示者被注入OnCreate
/OnCreateView
。這是該方案:
一個新的主持人注射:
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { ... getControllerComponent().inject(this); ... }
初始化
Loader
,onCreateLoader
被稱爲如果Loader
不存在。請注意,我們傳遞注射主持人:@Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); getLoaderManager().initLoader(PRESENTER_LOADER_ID, null, this); } @Override public Loader<MyPresenter> onCreateLoader(int id, Bundle args) { switch (id) { case PRESENTER_LOADER_ID: return new PresenterLoader<>(getContext(), presenter); //return new PresenterLoader<>(getContext(), new MyPresenterFactory()); } return null; }
分配從
Loader
收到的主持人。如果它剛剛創建,我們分配已分配的同一個對象,因此什麼都不會發生。但是,如果視圖被重新創建,那麼Dagger 2會注入一個新的主持人,在這裏我們扔掉新的主持人,並將其替換爲Loader
中的舊主持人。@Override public void onLoadFinished(Loader<MyPresenter> loader, MyPresenter data) { this.presenter = data; }
我想維護演示者實例,因此它是我想要發生的事情;我的問題是在每個視圖娛樂中創建一個冗餘的演示者對象。首先,這是不必要的,另外,視圖持有對不同演示者的引用,直到加載完成。很明顯,我在這段時間內(注射後和加載完成之前)沒有使用主持人,但我絕對不喜歡它,並擔心這個新的主持人將來會被錯誤地使用。
匕首專家2人,有沒有方法來創建演示在第一時間(Loader
之前創建),但避免對視娛樂?非常感謝!
您能分享它依賴的匕首組件定義和模塊嗎? –