To jest standardowa pułapka androida. KAŻDA zmiana konfiguracji (zmiana orientacji, zmiana rozmiaru ekranu, zmiana języka, ...) powoduje, że stan Activity jest zapisywany, a następnie tworzone jest nowe Activity z nową konfiguracją, a jego stan odtwarzana na podstaie zapisanych danych. Zapisane dostępne są w argumencie Bundle savedInstanceState
metody OnCreate
.
Najlepszym rozwiązaniem jest zapisanie twojej logiki w OnSaveInstanceState (Bundle outState)
a następnie w OnCreate
jeśli savedInstanceState
nie jest NULL odtworzyć ten stan.
W manifeście można ustawić, że sam będziesz obsługiwał zmiany konfiguracji (Activty nie zostanie ponownie utworzone) i obsługiwać to w onConfigurationChanged (Configuration newConfig)
, ale wtedy pojawią się problemy z kompatybilnością miedzy niektórymi wersjami Androida (np os 3.1 jest zmiana rozmiaru ekranu, więc jeśli chcesz obsługiwać starsze wersje, będzie to kłopotliwe).
Ad 2 i 3: http://stackoverflow.com/a/9335990/1387438