1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

Drehen des Bildschirms kurzfristig verhindern.

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von Gibbsnich, 29.05.2012.

  1. Gibbsnich, 29.05.2012 #1
    Gibbsnich

    Gibbsnich Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    56
    Erhaltene Danke:
    0
    Registriert seit:
    22.06.2010
    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?
     
  2. swordi, 29.05.2012 #2
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    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
     
    Gibbsnich bedankt sich.
  3. Gibbsnich, 29.05.2012 #3
    Gibbsnich

    Gibbsnich Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    56
    Erhaltene Danke:
    0
    Registriert seit:
    22.06.2010
    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!
     

Diese Seite empfehlen