Mam pewne problemy z uzyskaniem niektórych niestandardowych podklas DialogPreference wewnątrz PreferenceFragment, aby pozostały widoczne po obróceniu ekranu. Nie widzę tego problemu podczas korzystania z PreferenceActivity, więc nie wiem, czy to błąd Androida, czy problem z moim kodem, ale chciałbym, aby ktoś potwierdził, czy ma to samo doświadczenie.Dlaczego fragment nie zachowuje stanu po obróceniu ekranu?
Aby to przetestować, najpierw utwórz ekran preferencji zawierający co najmniej jeden DialogPreference (nie ma znaczenia, która podklasa). Następnie wyświetl go w PreferenceActivity. Po uruchomieniu aplikacji naciśnij DialogPreference, aby wyświetlało się okno dialogowe. Następnie obróć ekran, aby zmienić orientację. Czy okno dialogowe pozostaje widoczne?
Następnie spróbuj tego samego, ale z PreferenceFragment, aby wyświetlić preferencje zamiast PreferenceActivity. Ponownie, czy okno dialogowe pozostaje widoczne po obróceniu ekranu?
Do tej pory odkryłem, że okno dialogowe pozostanie widoczne przy użyciu właściwości PreferenceActivity, ale nie w przypadku używania PreferenceFragment. Patrząc na source code for DialogPreference, wydaje się, że prawidłowe zachowanie jest widoczne, ponieważ okno dialogowe pozostaje widoczne, ponieważ isDialogShowing
jest informacją o stanie, która jest zapisywana, gdy wywoływana jest re-orientacja ekranu, gdy onSaveInstanceState()
. Dlatego myślę, że błąd może uniemożliwić PreferenceFragment (i wszystko w nim) z przywracania informacji o stanie.
Jeśli jest to błąd Androida, ma on daleko idące konsekwencje, ponieważ każdy korzystający z PreferenceFragment nie może zapisywać ani przywracać informacji o stanie.
Czy ktoś może potwierdzić? Jeśli to nie błąd, to co się dzieje?
Trzecia opcja to standardowy sposób sprawdzania, czy "pierwsze" zostało wykonane. – SeanPONeil
Jak byś to zrobił? –
if (savedInstanceState == null) {}, że instrukcja zostanie rozwiązana na true tylko przy pierwszym utworzeniu działania – SeanPONeil