it-swarm.com.de

Android onConfigurationChanged wird nicht aufgerufen

Ich habe Probleme, Android mitzuteilen, onCreate() nicht aufzurufen, wenn sich die Ausrichtung ändert. Ich habe Android:configChanges="orientation" zu meinem Manifest hinzugefügt, aber immer noch, wenn sich die Ausrichtung onCreate() ändert. Hier ist mein Code.

AndroidManifest.xml

<activity Android:name="SearchMenuActivity" Android:theme="@Android:style/Theme.NoTitleBar" Android:configChanges="orientation"></activity>

SearchMenuActivity.Java

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // Set the current layout to the search_menu
    setContentView(R.layout.search_menu_activity);

    Log.d(TAG, "onCreate() Called");
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
    //don't reload the current page when the orientation is changed
    Log.d(TAG, "onConfigurationChanged() Called");
    super.onConfigurationChanged(newConfig);
}

Und meine LogCat-Ausgabe

06-23 12:33:20.327: DEBUG/APP(2905): onCreate() Called
//Orientation Changes
06-23 12:33:23.842: DEBUG/APP(2905): onCreate() Called

Weiß jemand, was ich falsch mache? Vielen Dank.

39
Stefan Bossbaly

Ein paar Dinge zu versuchen:

Android:configChanges="orientation|keyboardHidden|screenSize" statt Android:configChanges="orientation"

Stellen Sie sicher, dass Sie setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); nirgendwo anrufen. Dadurch wird onConfigurationChange () nicht ausgelöst.

Stellen Sie sicher, dass Sie in Ihrem Manifest nicht Android:screenOrientation verwenden.

Wenn dies nicht funktioniert, lesen Sie das Android-Dokument zur Handhabung von Laufzeitänderungen und stellen Sie sicher, dass Sie alles richtig machen. Möglicherweise gibt es irgendwo in Ihrem Code etwas, das das Problem verursacht. http://developer.Android.com/guide/topics/resources/runtime-changes.html

EDIT: Wie derrik wies, ging ich davon aus, dass Sie die Konfiguration mit dem Beschleunigungssensor geändert haben, der feststellte, in welche Richtung das Gerät zeigte. Wenn Sie möchten, dass die Konfiguration geändert wird, während die Tastatur angezeigt/ausgeblendet wird, müssen die configChanges im Manifest auch keyboardHidden enthalten.

55
shanet

Dies war mein Gremlin für dasselbe Problem:

Achtung: Ab Android 3.2 (API Level 13) wird die "Bildschirmgröße" ändert sich auch, wenn das Gerät zwischen Hoch- und Querformat wechselt Orientierung. Wenn Sie also einen Neustart der Laufzeit aufgrund von .__ verhindern möchten. Orientierungsänderung bei der Entwicklung für API-Level 13 oder höher (wie , deklariert durch die Attribute minSdkVersion und targetSdkVersion), Sie muss zusätzlich zur "Orientierung" den Wert "screenSize" enthalten Wert. Das heißt, Sie müssen decalare Android: configChanges = "Ausrichtung | screenSize". Wenn jedoch Ihre Anwendungsziel API-Level 12 oder niedriger, dann ist Ihre Aktivität immer behandelt diese Konfigurationsänderung selbst (diese Konfigurationsänderung startet Ihre Aktivität nicht neu, auch wenn sie auf einem Android 3.2- oder höheren Gerät ausgeführt wird).

(Von http://developer.Android.com/guide/topics/resources/runtime-changes.html )

TL; DR: Hinzufügen von "| screenSize" zu Android: configChanges = "direction" für API 14+

78
nmr

Versuchen Sie es mit diesem .....

Android:configChanges="orientation|keyboardHidden|screenSize"
10
sonida

Sie sollten den configChanges-Eintrag in AndroidManifest.xml folgendermaßen ändern:

Android:configChanges="keyboardHidden|orientation"

Andernfalls wird beim Schieben der Tastatur onConfigurationChange () nicht ausgelöst, obwohl sich die Ausrichtung ändert. Ich habe es gerade auf meinem HTC Desire Z getestet.

5
derrik

Fügen Sie dies Ihrem Manifest zu jeder Aktivität hinzu.

Android:configChanges="keyboardHidden|orientation|screenSize"

Überschreiben Sie dann onConfigurationChanged für Ihre Aktivität als solche

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
}
4
Munir Basheer

In meiner Fragment (Fragments sind nicht im AndroidManifest.xml registriert) wurde es nicht ausgelöst. Daher musste ich es in die Activity verschieben, die meine Fragment verwaltet, in meinem Fall die TabsPagerActivity.

1
craned

Manifest:

<activity
      Android:name=".MainActivity"
      Android:configChanges="orientation|keyboardHidden|screenSize">
</activity>

Aktivität & Fragment:

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    Log.d(TAG, "onConfigurationChanged  " +
               (newConfig.orientation
                == Configuration.ORIENTATION_LANDSCAPE
                ? "landscape" : "portrait"));
}

Ausgabe:

10-29 21:53:26.951 D/FragmentOne: onConfigurationChanged landscape

10-29 21:53:26.951 D/MainActivity:onConfigurationChanged landscape
1
Martin Pfeffer

Nur wenige Dinge können überprüft werden:

In meinem Fall verfolgte ich den Sprachwechsel des Geräts mithilfe von onConfigurationChanged.

Nur wenige Dinge müssen über onConfigurationChanged wissen, da es einen Unterschied im Verhalten zwischen onConfigurationChanged von Aktivität und Anwendung gibt.

Wenn Sie die Konfiguration des Geräts ändern, wird die Anwendungsebene onConfigurationChanged automatisch und sofort aufgerufen, onConfigurationChanged der Aktivität wird jedoch aufgerufen, wenn Sie zu dieser Aktivität navigieren.

und eine andere Sache ist, dass nur das Gebietsschema im Manifest irgendwann nicht mehr funktioniert. Sie haben also ein anderes Konfigurationsänderungsereignis zusammen mit dem Gebietsschema (in meinem Fall) deklariert, das wie folgt lauten sollte: Android: configChanges = "layoutDirection | locale"

0
anoopbryan2