2014-07-03 10 views
8

Ich lese XML-Daten von einer URL. Es funktionierte gut, wenn es im Hochformat war. Aber ich wollte es in den Querformatmodus ändern. Aber es wird android.view.WindowLeaked Ausnahme.android.view.WindowLeaked Ausnahme

Bitte helfen Sie mir dabei. Danke im Voraus. Das ist mein Code.

Antwort

21

Wenn ein Dialog für eine Aktivität auf "visible" gesetzt ist, aber bei einer Änderung der Ausrichtung die Aktivität selbst zerstört wird, führt dies zu einem ausgelaufenen Fensterfehler.

Es gibt zwei Methoden, um diese Situation zu behandeln: -

Methode 1
Daher müssen Sie onStop oder onDestroy Methode der zu dismiss Dialog in Aktivität. Zum Beispiel:

@Override 
protected void onStop() { 
    super.onStop(); 

    if(pd!= null) 
     pd.dismiss(); 
} 

und definieren Dialog in Aktivitätsklasse

ProgressDialog pd; 

Dieser Link wird Ihnen helfen, Handling progress dialogs and orientation changes

Methode 2
Sie haben dies in der auf die Aktivität Erklärung hinzufügen Manifest:

android:configChanges="orientation" 

so sieht es aus wie

<activity android:label="@string/app_name" 
     android:configChanges="orientation|keyboardHidden" 
     android:name="com.eisuru.abc.MainActivity"> 

Die Sache ist, dass das System die Aktivität zerstört, wenn eine Änderung in der Konfiguration auftritt. Siehe ConfigurationChanges.

Wenn Sie das in die Konfigurationsdatei eingeben, wird das System Ihre Aktivitäten nicht zerstören. Stattdessen ruft es die Methode onConfigurationChanged(Configuration) auf.

+0

Vielen Dank für Ihren nützlichen Kommentar. Ich habe die zweite Methode gemacht. Es hat sehr gut funktioniert. 'android: screenOrientation =" Landschaft "' 'android: configChanges =" Tastatur | keyboardHidden | Ausrichtung | screenLayout | uiMode | screenSize | littleScreenSize ">' – Isuru

+0

@Isuru Glücklich zu helfen, Kodierung genießen. –

+0

Methode 1 funktionierte perfekt für mich. Interessante Randnotiz: Ich hatte bereits die Ausrichtung in den ConfigChanges in meinem Manifest deklariert, als ich das Fensterleck ursprünglich bekommen habe. – LargeGlasses

1

Sie versuchen, ein Dialogfeld anzuzeigen, nachdem Sie eine Aktivität beendet haben.

Die Lösung besteht darin, in dem Dialog, den Sie in Example.java:183 erstellt haben, vor dem Beenden der Aktivität, z. in onPause(). Alle Fenster & Dialoge sollten geschlossen werden, bevor Sie eine Aktivität verlassen.

Oder

Fügen Sie diese auf Ihrem Manifest:

android:configChanges="orientation|keyboardHidden 

Dann in Ihrer Aktivität hinzufügen, um dieses irgendwo:

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

if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) 
{ 
    Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show(); 
    //ur Code 
} 
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) 
{ 
    Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show(); 
    //ur Code 
} 
} 
0

ich diesen Fehler bekam, weil ich eine Ansicht wurde die Zugabe in die onResume() aller meiner Aktivitäten mit WindowManager.addView(). Um das Problem zu lösen, musste ich WindowManager.removeView() im onPause() aller meiner Aktivitäten aufrufen.

1

dialog ist ein Kind, das zum Hauptthread gehört und wenn Sie sie anzeigen oder löschen möchten, müssen Sie dies auf OnUiThread wie folgt tun. Ich benutze Fragment und wenn ich Dialog zeige, bekomme diese Ausnahme. Aber diese Methode rettet mich.

getActivity().runOnUiThread(new Runnable() { 
     @Override 
     public void run() { 
      pDialog.show();//dismiss any dialog like this 
     } 
    }); 
+1

können Sie Ihre Antwort bearbeiten und erklären, wie das Problem gelöst wird? – beresfordt