2017-04-20 8 views
0

RouterPagerAdapter이있는 루트 컨트롤러는 자체 컨트롤러 RouterPagerAdapter을 호스팅합니다.중첩 된 RouterPagerAdapter가 회전시 상태를 복원하지 않습니다.

컨트롤러 A1 회전시

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

루트 컨트롤러, 및 A1가 onSaveInstanceState/onSaveViewState 수신 제어기에 의해 호스팅되지만도 A 및 A1은 onRestoreInstanceState/onRestoreViewState를 수신하다.

왜 이렇게됩니까? 모든 어린이가 상태를 복원 할 수 있도록 올바른 구현은 무엇입니까?

답변

0

onSaveViewState이 호출되지만 은 viewPager.setAdapter(null); 행으로 인해 호출되지 않습니다.

Conductor의 docs에있는 예제는보기가 소멸 될 때 어댑터를 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의 저장 상태를 덮어 쓰고 잘못된 현재 항목을 표시합니다.