2016-06-20 3 views
0

Ich benutze onConfigurationChanged Funktion zu überprüfen Orientierungsänderung auf Android 4.0.3 für zwei verschiedene Fragment auf meinem Projekt, aber wenn Anwendung in erster Position (Querformat oder Hochformat) zeigt related Fragment nicht angezeigt, wenn ich das orientation related fragment ändern aber wenn ich es wieder ändere, stürzte die Anwendung ab. hier ist mein Code:Warum stürzt die Anwendung bei der Verwendung der onConfigurationChanged-Funktion ab?

FragmentManager  fragmentmanager  = getFragmentManager(); 
FragmentTransaction fragmentTransaction = ragmentmanager.beginTransaction(); 


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

    // Checks the orientation of the screen 
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { 
     Fragment1 fragment1 = new Fragment1(); 
     fragmentTransaction.replace(android.R.id.content, fragment1); 

    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) { 
     Fragment2 fragment2 = new Fragment2(); 
     fragmentTransaction.replace(android.R.id.content, fragment2); 
    } 
    fragmentTransaction.commit(); 
} 

wie kann ich es lösen?

+0

Welche Art von Ausnahme erhalten Sie? –

+0

Setzen Sie das Protokoll der Ausnahme – Amir

+0

Und ich glaube, Sie nicht entfernen vorherige Fragment und das ist Ursache Ausnahme. – Amir

Antwort

0

Stellen Sie zunächst sicher, dass Sie in Ihrer Aktivität im Manifest das Attribut android:configChanges deklariert haben.

Wenn eine Konfigurationsänderung zur Laufzeit auftritt, wird die Aktivität standardmäßig heruntergefahren und neu gestartet, aber die Deklaration einer Konfiguration mit diesem Attribut verhindert, dass die Aktivität neu gestartet wird. Stattdessen wird die Aktivität ausgeführt und die onConfigurationChanged() -Methode aufgerufen.

So müssen Sie manifestieren Attribut erklären, um Ihre Aktivität zu machen, dass Sie Konfigurationsänderungen von selbst behandeln werden:

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

Auf den zweiten, müssen Sie Transaktion anwenden voronConfigurationChanged, da es wird nicht beim Start aufgerufen - der Grund, dass Sie nichts beim Start der Anwendung sehen.

Endlich stellen die Linien FragmentManager fragmentmanager = getFragmentManager(); FragmentTransaction fragmentTransaction = ragmentmanager.beginTransaction();

innerhalb des OnConfigurationChange() Null-Zeiger Ausnahme nach der Garbage Collection zu vermeiden.

+0

danke, dass mein Fehler FragmentManager war fragmentmanager = getFragmentManager(); FragmentTransaction fragmentTransaction = rapmentmanager.beginTransaction(); außerhalb der Funktion, aber es gibt immer noch ein Problem, dass bei der ersten Anwendung keine der Fragmente nicht angezeigt wird. :( – zahraMHD

+0

Beim ersten Start überprüfen Sie, ob Sie Portrait oder Landschaft sind und dann Transaktion anwenden –

Verwandte Themen