2012-07-01 15 views
5

Przeczytałem wiele postów dotyczących tego problemu, takich jak [ten link] [1], a jednym z rozwiązań jest dodanie konfiguracji configChanges do manifestowania i obsługi zdarzenia onConfigurationChanged, aby zapobiec ponownemu wywołaniu działania onCreate podczas rotacji. Zrobiłem to i zdarzenie jest uruchamiane poprawnie, jednak po wykonaniu tego, metoda onCreate również jest wykonywana! czemu? czego mi brakuje? DziękujęAktywność Androida uruchomiona ponownie po zmianie orientacji

manifestu

<activity 
      android:name="webPush" 
      android:configChanges="keyboardHidden|orientation"/> 

aktywność,

@Override 
    public void onConfigurationChanged(Configuration newConfig) { 
     super.onConfigurationChanged(newConfig); 
     setContentView(R.layout.vistaaib); 
    } 

@Override 
    protected void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.vistaaib); 
... 

Odpowiedz

11

myślę, że to będzie działać .........

<activity android:name=".MyActivity" 
      android:configChanges="orientation|keyboardHidden" 
      android:label="@string/app_name"> 

Począwszy od Androida 3.2 (API poziom 13), na ekranie” rozmiar "zmienia się również, gdy urządzenie przełącza się między orientacją pionową i poziomą. Tak więc, jeśli chcesz, aby uniemożliwić ponowne uruchomienie środowiska wykonawczego w związku ze zmianą orientacji przy opracowywaniu na poziomie API 13 lub wyższej należy użyć

android:configChanges="orientation|screenSize" 
+0

nadal wyzwalanie onCreate po zdarzeniu onConfigChanges – Jaume

+0

Czy wspomniałeś o tym w pliku AndroidManifest w ramach działania, któremu nie można wywoływać onCreate() –

+0

tak, jak opublikowano, webPush jest aktywnością, której należy zapobiegać metodą onCreate: – Jaume

1

napisać to dwie linie kodu w pliku manifestu w tej działalności.

Wydaje się, że to rozwiąże Twój problem. <activity android:name=".YourActivity" android:configChanges="orientation|keyboardHidden"/>

+0

nadal wyzwalanie onCreate po zdarzeniu onConfigChanges – Jaume

1

Twoje działanie zostanie wznowione po każdej zmianie konfiguracji. Najprawdopodobniej jest on ponownie uruchamiany, ponieważ zmienia się stan klawiatury. Spróbuj dodać to do atrybutów działalności jest:

android:configChanges="orientation|keyboard|keyboardHidden" 
+0

nadal wyzwalanie onCreate po onConfigChanges imprezy – Jaume

+1

jeśli chcesz zapobiec restartów wykonawcze ze względu na orientację zmień podczas tworzenia dla poziomu interfejsu API 13 lub wyższego, oprócz wartości "orientacji" musisz uwzględnić wartość "screenSize". Oznacza to, że musisz odcyfrować android: configChanges = "orientation | screenSize" – Rashid

0

Jeśli pracujesz na poziomie API 12 lub niższy

W menifest pliku, umieścić następujące tuż po zadeklarowaniu swojej nazwy działalności.

android:configChanges="orientation" 

e.g.-

<activity 
     android:name=".NameOfYourActivity" 
     android:configChanges="orientation"/> 

A android 3.2 (poziom API 13) lub nowszej rozmiarze ekranu zmienia się również podczas obrotu zmienia się więc stwierdzenie, to zbyt.

do tego,

android:configChanges="orientation|screenSize" 
2

Zrobiłem to. Dodałem ten kod do manifestu i działa idealnie.

<activity 
     android:name="?" 
     android:label="@string/?" 
     android:theme="@style/?" 
     android:configChanges="orientation|screenSize"> 

Będziesz musiał dodać to pod aktywnością, jeśli chcesz coś zmienić, gdy urządzenie obraca się.

public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 

    // Checks the orientation of the screen 
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { 
     Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show(); 
    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){ 
     Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show(); 
    } 
} 
0

następstwie może być powodem

Event: Rozmiar ekranu

Prąd dostępny rozmiar ekranu zmieniły. Jest to zmiana w aktualnie dostępnym rozmiarze w stosunku do bieżącego współczynnika kształtu, a więc zmieni się, gdy użytkownik przełącza się między krajobrazem a portretem.Jeśli jednak twoja aplikacja kieruje się na poziom API 12 lub niższy, to twoja aktywność zawsze obsługuje tę zmianę samej konfiguracji (ta zmiana konfiguracji nie uruchamia ponownie twojej aktywności, nawet jeśli działa na urządzeniu z Androidem 3.2 lub nowszym). Dodane w poziomie API 13.

więc wraz z „orientacją” Dodaj „Rozmiar ekranu” oraz

Powiązane problemy