2017-04-20 1 views
0

Der Stammcontroller, der über eine RouterPagerAdapter verfügt, hostet den Controller A, der über eine eigene RouterPagerAdapter verfügt.Verschachtelter RouterPagerAdapter gibt den Status bei der Rotation nicht zurück

Controller A1 wird durch die Steuerung gehosteten A

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

Bei Drehung, Root-Controller, A und A1 ihre onSaveInstanceState/onSaveViewState erhalten, aber weder A noch A1 ist empfängt es onRestoreInstanceState/onRestoreViewState.

Warum ist das so? Was ist die korrekte Implementierung, um sicherzustellen, dass alle Kinder ihren Status wiederhergestellt haben?

Antwort

0

onSaveViewState wird aufgerufen, aber wird aufgrund der viewPager.setAdapter(null); Zeile nicht aufgerufen werden.

Das Beispiel in der Dokumentation von Conductor setzt den Adapter auf null, wenn die Ansicht zerstört wird.

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

Aus diesem Grund wird RouterPagerAdapter nennen configureRouter, auf die die router tut nicht einen Root-Controller haben und werden new Cont()

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

Beachten Sie auch, wenn eine viewPager innerhalb eines anderen Verschachtelung, beide sollten haben einzigartige IDs, sonst bei Rotation überschreibt den Speicherstatus des Elterns viewPager, und zeigt das falsche aktuelle Element.

Verwandte Themen