Android-przełączanie między trybem poziomym i pionowym powoduje utratę wartości intencji
Używam Intentów, aby przełączać się między aktywnościami w mojej aplikacji na Androida. Umieszczam dane w celu wykorzystania w następnym działaniu. Kiedy przełączam Telefon między trybami poziomym i pionowym, wartości przekazane z intencji są tracone i otrzymuję wyjątek NullPointerException.
Czy ktoś może mi powiedzieć, co może być nie tak?Jest dużo kodu, aby go w całości opublikować. Ale jeśli ktoś musi przyjrzeć się konkretnym fragmentom kodu, mogę go zamieścić proszę.
Edit
Rozwiązałem problem nie ocalenia Państwa. Ale innym problemem, z jakim się spotkałem, jest to, że żaden z przycisków na ekranie nie działa po zmianie orientacji. Po naciśnięciu przycisku dostaję to Ostrzeżenie W LogCat
02-25 23:07:49.190: WARN/WindowManager(58): No window to dispatch pointer action 0
Proszę o pomoc. 6 answers
Po zmianie orientacji aktywność jest odtwarzana, a onCreate jest przywoływane, więc musisz użyć pakietu, aby zapisać swój aktualny stan i przywrócić po zmianie orientacji. Możesz to zobaczyć w akcji, jeśli masz tylko aplikację z widokiem tekstowym i wprowadzasz tekst i zmieniasz orientację. / Align = "center" bgcolor = "# e0ffe0 " / cesarz chin / / align = center / Prawdopodobnie dlatego masz NullPointer po zmianie orientacji. To jest irytujące jak diabli ale coś musimy żyć z.
Ten link do serii samouczków orientacyjnych i ten pierwszy w szczególności powinien pomóc ci dokładnie zrozumieć, co się dzieje i jak skutecznie utrzymać obecny stan.
Update: jest też post NA so Activity restart on rotation Android , który dotyczy prawie tego samego.
Edit for follow up question:
Czy po zmianie orientacji ponownie załączyłeś programy obsługi kliknięć?
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:45:36
Napisz to w swoim manifeście file..in które działanie chcesz to --
android:configChanges="orientation|keyboardHidden"
Edited: Użyj tego dla nowych wersji API--
android:configChanges="orientation|keyboardHidden|screenSize"
Zdecydowanie zadziała..Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-11 05:20:44
Spróbuj tego:
@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);
...
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-12 23:32:37
Można zadeklarować atrybut android: configChanges o wartości "orientation", zapobiegnie to ponownemu uruchomieniu aktywności. Zamiast tego aktywność pozostaje uruchomiona i wywołana jest jej metoda onConfigurationChanged ().
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-03-20 14:21:17
Zadeklaruj < android:configChanges="orientation|keyboardHidden"/>
w manifeście. Umożliwia to samodzielne zarządzanie zmianą orientacji / widoczności klawiatury. Oczywiście nie musisz nadpisywać metody wywołania zwrotnego, aby nią zarządzać.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-22 06:03:03
Witam również napotkałem ten problem. to co dla mnie poprawiło to:
@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 następnie w 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");
}
Wtedy możesz być pewien, że obiekty nie są null.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-29 17:24:02