Drehen des Bildschirms kurzfristig verhindern.

Gibbsnich

Gibbsnich

Ambitioniertes Mitglied
0
Hallo,

meine App lässt sich bisher in allen Dialogen und Listen beliebig drehen.

Nun kommt eine transparente WebView als neues Fenster dazu und dabei soll die aktuelle Position eingefroren und somit weiteres Drehen verhindert werden.
Die neue View wird über einen Button angefordert und das geht so:
Code:
    public void showXmlMessage(String message) {
        if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        } else {
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
        }
        Intent i = new Intent(
                getApplicationContext(), 
                FormWebView.class);
        if (message != null) {
            i.putExtra(FormWebView.INTENT_RES_MESSAGE, message);
            this.startActivityForResult(i, FormWebView.INTENT_RESCODE); 
        }
    }
In der Methode onActivityResult setze ich nach der Rückkehr mit
Code:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
die Rotation wieder frei.

Zunächst sieht das auch gut aus und ein Drehen findet nicht mehr statt.

Aber: Wenn ich nach Aufruf der WebView das Handy drehe und dann die View beende, dreht sich die App (noch ok) und die WebView wird erneut aufgerufen (gar nicht ok)!
Das passiert immer, wenn die WebView nach einer Drehung geschlossen wird. Ab dem 2. Mal ist der Hintergund (die darunterliegende Liste) nicht mehr zu sehen, sondern alles bleibt schwarz.

Was mache ich da falsch und warum wird das Fenster erneut angezeigt?
 
wenn du in onactivityresult die rotation wieder erlaubst, wird ja genau danach direkt rotiert.

nach einer rotation werden alle activity lifecycle methoden erneut durchlaufen. du musst eben verhindern dass etwas neu erzeugt wird, wenn es bereits vorher mal erzeugt wurde.

onsaveinstancestate könnte dir helfen
 
  • Danke
Reaktionen: Gibbsnich
swordi schrieb:
wenn du in onactivityresult die rotation wieder erlaubst, wird ja genau danach direkt rotiert.

nach einer rotation werden alle activity lifecycle methoden erneut durchlaufen. du musst eben verhindern dass etwas neu erzeugt wird, wenn es bereits vorher mal erzeugt wurde.

onsaveinstancestate könnte dir helfen

Danke für deine schnelle Antwort!

Das mache ich ja eigentlich auch: onSaveInstanceState und onRestoreInstanceState nutze ich bisher (erfolgreich ;-) um meine Daten zu sichern (z.B. Inhalte von Textfeldern). Auch der Dialog, in dem das Problem gerade auftaucht, ist problemlos drehbar.

Es ist ja auch richtig, dass nach dem Schließen der Webview erkannt wird, dass eine Drehung anliegt und der letzte Dialog auch tatsächlich gedreht wird.
Warum aber ruft anstatt sich selbst neu darzustellen, die letzte Button-Aktion noch einmal auf?

Der ursprüngliche Beitrag von 12:35 Uhr wurde um 14:27 Uhr ergänzt:

Wenn swordi vorschlägt, es so zu programmieren, wie ich es schon gemacht habe, dann ist das wahrscheinlich auch richtig gewesen und das Problem steckt woanders....

Richtig:
Im onCreate() rufe ich die Darstellung anhand einiger Variablen auf und deren Inhalt habe ich versehentlich mit den Werten der WebView überschrieben.

Verhindere ich das Überschreiben in diesem Fall, dann klappt plötzlich alles :biggrin:

Danke!
 

Ähnliche Themen

A
Antworten
1
Aufrufe
629
swa00
swa00
P
Antworten
5
Aufrufe
3.680
MisterRoboto
MisterRoboto
Gemini-Media
Antworten
1
Aufrufe
1.778
swa00
swa00
Zurück
Oben Unten