Android - přepínání mezi krajinou a výšku dělá Intent ztratit hodnoty

hlasů
19

Já používám záměry pro přepínání mezi činnostmi v mé aplikaci pro Android. Dávám data v Intent pro použití v další činnosti. Když jsem telefon přepnout mezi Krajina s portrétem režimy, hodnoty předané od záměru jsou ztraceny a já si NullPointerException.

Může mi někdo prosím, řekněte mi, co by mohlo být špatně.

Je tu spousta kódu post úplně. Ale pokud někdo potřebuje se dívat na konkrétních částí kódu, mohu post zde.

Edit
jsem vyřešil problém státu neukládají. Ale další problém, který jsem čelí, je, že žádná z tlačítek na obrazovce práce po orientace byla změněna. Na stisknutí tlačítka, jsem si toto upozornění Logcat

02-25 23:07:49.190: WARN/WindowManager(58): No window to dispatch pointer action 0

Prosím pomozte.

Položena 25/02/2009 v 06:10
zdroj uživatelem
V jiných jazycích...                            


6 odpovědí

hlasů
23

Při přepnutí orientace aktivita je znovu a onCreate Je třeba připomenout, takže budete muset použít balíček uložit aktuální stav a obnovit po změně orientace. Je to vidět v akci, pokud máte jen aplikace s TextView a zadávání textu a změnit orientaci. Máte-li svazek váš stav pro onCreate můžete omezit to. To je zřejmě také důvod, proč máte NullPointer po změnách orientace. Je to nepříjemné, jak peklo, ale něco, co musíme žít.

Tento odkaz na sérii orientačních cvičení a tento první zejména byste měli pochopit, přesně to, co se děje a jak úspěšně udržovat aktuální stav.

Aktualizace: K dispozici je také příspěvek na SO aktivity restartovat na otáčení Android , která se zabývá téměř stejnou věc.

Úpravě pro navázat na otázku:

Ses znovu připojit své kliknutí manipulátory po změně orientace?

Odpovězeno 25/02/2009 v 06:23
zdroj uživatelem

hlasů
9

Píšu ve svém manifestu file..in které činnosti chcete tohle--

 android:configChanges="orientation|keyboardHidden"

Upraveno: Použijte jeden pro nové API versions--

android:configChanges="orientation|keyboardHidden|screenSize"

Určitě to bude fungovat ..

Odpovězeno 10/05/2012 v 10:17
zdroj uživatelem

hlasů
5

Zkuste to:

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putString(SOME_KEY, "blah blah blah");
}

@Override
public void onCreate(Bundle savedInstanceState) {
   ...
   somevalue = savedInstanceState.getString(SOME_KEY);
   ...
}
Odpovězeno 13/07/2009 v 10:33
zdroj uživatelem

hlasů
3

Je možné prohlásit atribut android: configChanges s hodnotou „orientace“, bude to bránit aktivitu před restartován. Místo toho, aktivita zůstává v chodu a jeho způsob onConfigurationChanged () je volána.

Odpovězeno 20/03/2011 v 15:21
zdroj uživatelem

hlasů
1

Deklarovat < android:configChanges="orientation|keyboardHidden"/>ve svém manifestu. To umožňuje řídit změnu viditelnosti Orientation / Keyboard sami. Samozřejmě, že není nutné přepsat metody zpětného volání pro správu ji.

Odpovězeno 22/10/2012 v 07:03
zdroj uživatelem

hlasů
0

Hi I tento problém také setkal. co pevnou to pro mě bylo:

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    // Save the user's current game state
    savedInstanceState.putString("Username", mUsername);
    savedInstanceState.putString("Password", mPassword);
    savedInstanceState.putString("UserID", mUserID);

    // Always call the superclass so it can save the view hierarchy state
    super.onSaveInstanceState(savedInstanceState);
}

a poté v onCreate ():

if (savedInstanceState == null) {
    Bundle extras = getIntent().getExtras();
    if(extras == null) {
        mUsername = "?";
        mPassword = "?";
        mUserID = "?";
    } else {
        mUsername = extras.getString("Username");
        mPassword = extras.getString("Password");
        mUserID = extras.getString("UserID");
    }
} else {
    mUsername = (String) savedInstanceState.getSerializable("Username");
    mPassword = (String) savedInstanceState.getSerializable("Password");
    mUserID = (String) savedInstanceState.getSerializable("UserID");
}

pak si můžete být jisti, že tyto objekty nejsou null.

Odpovězeno 29/10/2015 v 17:24
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more