Frage Wie kann onCreate Aktion deaktiviert werden, wenn die Ausrichtung geändert wird?


Wie kann ich das Ereignis "onCreate" deaktivieren, wenn ich das Gerät aus dem Hochformat wechsle? Denn wenn die Anwendung startet, erhält sie einen Großteil ihrer Daten aus dem Internet, und es ist schlecht, diese Daten jedes Mal herunterzuladen, wenn der Benutzer sein Gerät ausschaltet.


11
2017-11-01 06:24


Ursprung


Antworten:


Im Aktivitäts-Tag des Manifestschreibens

android: configChanges = "Ausrichtung | Bildschirmgröße"

Beispiel:

<activity android:name=".MainActivity"
            android:configChanges="orientation|screenSize">

23
2017-11-01 06:29



Verwenden Sie ein Flag einchecken onCreate. Setzen Sie flag = true zum Zeitpunkt der Initialisierung / Deklaration füge android: configChanges = "orientation" in deiner Manifest-Datei hinzu

In Ihrer Java-Datei überschreiben Sie die onConfigurationChanged Methode und mache das Flag als falsch.

Danach wird ur onCreate aufgerufen, aber der Code erwähnt in ob wird nicht angerufen. Verschieben Sie Ihren Code in die ob Bedingung.

versuche dies zu benutzen.

static boolean flag = true;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    if(flag)
        Log.d("ONCREATE", "flag is true");
}    
@Override
public void onConfigurationChanged(Configuration newConfig) {
    // TODO Auto-generated method stub
    Log.d("ONCONFIGCHANGE", "CALLED" );
    flag = false;
    super.onConfigurationChanged(newConfig);
}

3
2017-11-01 06:56



Alternativer Ansatz ist die Verwendung von onSaveInstanceState Methode zum Speichern von nicht persistenten Daten in einem Bundle. Der Zustand sollte entweder wiederhergestellt werden onRestoreInstanceState oder in onCreate. Im onCreate du musst analysieren savedInstanceState Parameter und wenn es nicht null ist, sollten Sie den zuvor gespeicherten Status wiederherstellen.


3
2017-11-01 07:23



Diese Lösung ist mit Abstand die beste. in Ihrer Manifestdatei hinzufügen

<activity
        android:configChanges="keyboardHidden|orientation|screenSize"
        android:name="your activity name"
        android:label="@string/app_name" 
        android:screenOrientation="landscape">
      </activity

Fügen Sie in Ihrer Aktivitätsklasse den folgenden Code hinzu

@Override
public void onConfigurationChanged(Configuration newConfig) 
{
    super.onConfigurationChanged(newConfig);
    if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
        //do your stuff here
        //
    } else if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
  //do your stuff here

    }
}

2
2017-10-08 09:33



In der manifest.xml fügen Sie android: configChanges = "orientation" für die Aktivität hinzu.


1
2017-11-01 06:29



Für C # Xamarin habe ich diese Lösung:

using System.Collections.Concurrent;


public static class ObjectExchanger
{
    private static ConcurrentDictionary<string, object> ObjectList = new ConcurrentDictionary<string, object>();

    /// <summary>
    /// Add key and object. Do not add the same key twice.
    /// </summary>
    /// <param name="key"></param>
    /// <param name="obj"></param>
    public static void Add(string key, object obj)
    {
        ObjectList.GetOrAdd(key, obj);
    }

    /// <summary>
    /// Get object via key. Do net Get twice. Key/object will remove after get it once.
    /// </summary>
    /// <param name="key"></param>
    public static object Get(string key)
    {
        object obj = null;

        ObjectList.TryRemove(key, out obj);

        return obj;
    }
}

Sie können in der OnCreate-Methode zum Sichern und Wiederherstellen Ihrer Daten für die Aktivität nach der Rotation verwenden.


-1
2017-12-29 11:02