2016-06-23 6 views
0

Fragmentのライフサイクルにおける保持されるインスタンスの唯一の違いは、onCreate()が呼び出されないことです。しかし、この状態ではViewはまだ膨張していません。プレゼンター:setRetainInstance(true)フラグメントで非同期処理を開始するタイミング

setRetainInstance(true)ののフラグメントをPresenterのように呼び出す必要がありますか?私はloadNews()に、フラグメントの新しいインスタンスが作成されたときにのみしたいと思います。

答えて

1

Fragment.onViewCreated()これは、UI(表示)が初期化され、表示する準備ができていることを確認できます(そうでないと、プレゼンターがview.showLoading()を呼び出すとNullPointerExceptionが発生するためです)。しかし、あなたはモスビーのViewStateの機能を使用する場合は、onNewViewState()メソッドをオーバーライドしてpresenter.loadData()を呼び出す

bundle == null場合つまりチェック)loadingDataは初回のみ呼び出されることを自分自身で確認する必要があります。モスビーはビューが初めて表示されたときにこのメソッドを呼び出すだけなので、自分でbundle == nullをチェックする必要はありません。

+0

はい、私はMosbyのViewStateを使用します。しかし、 'Fragment.setRetainInstance(true)'を実行すると、画面の回転後に 'bundle == null'と表示されます。 – Alexandr

+1

それから 'MvpViewStateFragment.onNewViewState()'を使い、そこに 'presenter.loadData()'を入れてください。 'onNewViewState()'はフラグメントが初めて生成されるときにのみ呼び出されるので、 "onFirstTime()"と似ています。 – sockeqwe

+0

別の問題に直面しました。ビューがインスタンス化される前に実行されたonNewViewState。私は、ViewのメソッドコードをHandlerでラップして解決策を見ています。他のアイデア? – Alexandr