2012-03-18 17 views
10

Jestem nowy na Androida. Napisałem kilka programów i wypróbowałem je na moim telefonie. Kiedy przełączam orientacje, mój telefon restartuje program. Wszystkie moje zmienne zostaną zresetowane. W rzeczywistości jedyną rzeczą, która się nie resetuje, jest tekst w widokach edycji tekstu. Co to powoduje? Jak mogę to zatrzymać? Próbowałem go szukać w google i przepełnienie stosu, ale widzę tylko, jak orientacji widoku od zmieniania wszystkich razem. W jednym programie próbowałem nawet ustawić zmienne za pomocą metody get text, ale to nie działa.Utrata wartości zmiennych przełączanie orientacji

+1

Zobacz moją odpowiedź tutaj http://stackoverflow.com/questions/6764086/setting-the -background of-an-activity –

Odpowiedz

8

Kiedy przełączam orientacje, jego telefon uruchamia ponownie program.

Dobrze być dokładnym, aktualnie widoczny Activity jest całkowicie zniszczony i odtworzony. Inne elementy twojej "aplikacji" mogą lub nie mogą mieć wpływu.

Co to powoduje? Jak mogę to zatrzymać?

Jest to zgodne z projektem i do jego zatrzymania, możesz lub nie chcesz tego zrobić.

Jak już wspomniano, możliwe jest określenie, że użytkownik chce samodzielnie obsługiwać zmiany konfiguracji (takie jak orientacja), a nawet wymusić tylko jeden (np. Krajobraz lub portret).

W wielu przypadkach twórca aplikacji może jednak zmienić układ na podstawie tego, czy urządzenie znajduje się w jednej orientacji, czy w innej. Niektóre układy mogą działać dobrze w układzie pionowym, ale nie w układzie poziomym (lub odwrotnie), a celem zaprojektowanego podejścia (zniszczenie/odtworzenie aktualnie widocznego Activity) jest przystosowanie się do tego.

Jeśli dev nie zdecyduje się na zmianę konfiguracji lub wymusi określoną orientację, prawidłowym sposobem postępowania jest upewnienie się, że wszystkie dane wprowadzone do "zmiennych" elementów interfejsu użytkownika (takich jak EditTexts) są poprawnie zapisane i odtworzone po zmianie orientacji.

Aby to osiągnąć, niezbędne jest zrozumienie cyklu życia Activity, ponieważ wykorzystuje się różne metody Activity, które są wywoływane w całym cyklu życia w celu zapisywania/przywracania danych.

Niezbędne czytanie ...

Runtime Changes

Activity Lifecycle

Application Fundamentals

+0

Dzięki za miłą, dokładną odpowiedź i warunki! Robi kompletny, ponieważ, dlaczego. Muszę być szczery. Zgubiłem się czytając strony programistyczne i nie rozumiem większości z tego, co mówią, chyba że mam dobrą podstawową wiedzę i zrozumienie przed ręką. Najlepiej dowiaduję się z przykładów i samouczków. I PRZEDMIOTU gra z metodami. – JBreezy901

+0

@ JBreezy901: Dokładnie rozumiem, co masz na myśli na temat stron dla programistów. Byłem w tym samym miejscu 16 miesięcy temu, kiedy po raz pierwszy zacząłem z Androidem i nawet teraz prawdopodobnie przerzuciłem tylko niewielki procent tego, co tam jest (i tylko takie rzeczy, które do tej pory potrzebowałem). Dokumentacja Podstawy Aplikacji wraz z tą dla Aktywności i jej cyklu życia zdecydowanie warta jest zakładek. Cieszę się, że mogłem rzucić trochę światła, dobrze się bawić. – Squonk

2

Jest to zgodne z projektem, onCreate zostanie wywołany po zmianie orientacji. Jeśli nie jest to pożądane, możesz ustawić, aby nie reagował na zmiany orientacji w AndroidManifest.xml, w związku z czym aktywność nie zostanie odtworzona, ustawienie aktywności ograniczy ją do trybu pionowego.

Aby uzyskać więcej informacji na temat ustawień, zobacz this.

4

Upewnij się, że zaimplementowałeś onSaveInstanceState i przygotuj się na przywrócenie swojej aktywności z Bundle w onCreate, a wszystko będzie gotowe. będą one wywoływane podczas rotacji, więc będziesz miał później nową aktywność, ale jeśli zapisałeś swój stan i możesz go przywrócić, nic się nie martwisz.

+0

Nadal chcę, aby mój program dostosował swój układ przy zmianie z portretu i krajobraz. Wszystko, co chcę zachować, to moje zmienne. Szczególnie Ints. Czy to zadziała? – JBreezy901

+0

tak, jeśli umieścisz wszystkie zmienne w tym pakiecie, a następnie w metodzie "onCreate" pobierz je z pakietu zamiast inicjować swoją aktywność od zera, wszystko będzie gotowe. – dldnh

2

See this answer: Znajdź odpowiedź od Roberta. Dokładnie to musisz zrobić.

+0

[permalink] (http://stackoverflow.com/a/4101501/1318194) – stackunderflow

0

Lepiej dodać android:configChanges="keyboardHidden|orientation|screenSize" to AndroidManifest.xml in aktywność

Powiązane problemy