2017-04-20 10 views
0

RouterPagerAdapterを持つルートコントローラは、自身のRouterPagerAdapterを持つコントローラAをホストします。ネスト化されたRouterPagerAdapterがローテーションで状態を復元しない

コントローラA1は、回転すると

[ Root Controller ] 
[ A ] [ B ] 
[A1] [A2] 

、ルートコントローラ、A及びA1がそのonSaveInstanceState/onSaveViewStateを受け取るコントローラによってホストされているが、いずれもA A1はonRestoreInstanceState/onRestoreViewStateを受信されます。

これはなぜですか? すべての子供が自分の状態を復元できるようにするための正しい実装は何ですか?

答えて

0

onSaveViewStateが呼び出されますが、はviewPager.setAdapter(null);行のために呼び出されません。

Conductorのドキュメントの例では、ビューが破棄されるときにアダプタがnullに設定されています。このため

Override protected void onDestroyView(@NonNull View view) { 
    viewPager.setAdapter(null); 
    super.onDestroyView(view); 
    } 

RouterPagerAdapterを呼び出しますconfigureRouterrouterがルートコントローラを持っていない、と別の内viewPager、両方がすべきをネストするときnew Cont()

if (!router.hasRootController()) { 
     router.setRoot(RouterTransaction.with(new Cont())); 
    } 

はまた、注意しますしているに一意のIDを持っている場合は、他のローテーションでは親の保存状態を上書きするviewPager、間違った現在の項目が表示されます。

関連する問題