Views mit einer ID behalten beim Wechsel in den Quer-Modus ihren Inhalt?

  • Antworten:10
Gelöschter Account
  • Forum-Beiträge: 101

15.09.2010, 10:08:10 via Website

Guten morgen Leute,

ich war letztens auf der MobileTechCon in Mainz und dort ging es in einer Session um das Thema des Wechsels der ScreenOrientation. Dabei hat der Vortragende etwas erwähnt was ich bis dato nicht wusste und bisher auch noch nicht nachbauen. Und zwar sagte er: Views, wie TextViews oder EditViews, die mit einer ID versehen sind behalten ihren Inhalt automatisch nach der Änderung der ScreenOrientierung. Anders ausgedrückt: Wechselt der Nutzer vom Portrait- in den Quermodus baut sich die Activity neu auf und Android merkt sich von sich aus den Inhalt von Views mit einer ID. Der Entwickler muss also deren Inhalt nicht per "onSaveInstance" im Bundle speichern und bei "onCreate" die Views neu belegen.

Könnt ihr das bestätigen? Ich hab es mehrmals versucht, aber leider nicht hinbekommen.

MfG
benjamin

Antworten
Gelöschter Account
  • Forum-Beiträge: 5.136

15.09.2010, 10:22:50 via Website

Hallo Benjamin,

es gibt dazu folgende Info auf developer.android.com

In some special cases, you may want to bypass restarting of your activity based on one or more types of configuration changes. This is done with the android:configChanges attribute in its manifest. For any types of configuration changes you say that you handle there, you will receive a call to your current activity's onConfigurationChanged(Configuration) method instead of being restarted. If a configuration change involves any that you do not handle, however, the activity will still be restarted and onConfigurationChanged(Configuration) will not be called.

Du kannst somit verhindern dass bei benannten ConfigChanges die Activity restartet wird.

lg Voss

Antworten
Markus Gu
  • Forum-Beiträge: 2.644

15.09.2010, 12:03:01 via Website

Jörg V.
Hallo Benjamin,

es gibt dazu folgende Info auf developer.android.com

In some special cases, you may want to bypass restarting of your activity based on one or more types of configuration changes. This is done with the android:configChanges attribute in its manifest. For any types of configuration changes you say that you handle there, you will receive a call to your current activity's onConfigurationChanged(Configuration) method instead of being restarted. If a configuration change involves any that you do not handle, however, the activity will still be restarted and onConfigurationChanged(Configuration) will not be called.

Du kannst somit verhindern dass bei benannten ConfigChanges die Activity restartet wird.

glaub nicht dass er sowas gemeint hat.

swordiApps Blog - Website

Antworten
Gelöschter Account
  • Forum-Beiträge: 101

15.09.2010, 15:34:43 via Website

Stimmt, die Aussage besagt, dass nach einem Neuerstellen (inkl. onCreate, onStart usw.) der Activity die Inhalte mit ID noch vorhanden sind. ConfigChances unterdrückt ja das Neuerstellen der Activity.

Edit: Trotzdem ist android:configChanges sehr praktisch. Nur hab ich Angst, dass es in irgendeiner Weise negative Auswirkungen haben kann. Könnte es Nachteile haben wenn ich das Neuerstellen von Activities mittels android;configChanges="orientation" unterdrücke? Hast du da Erfahrungen @Jörg ?

— geändert am 15.09.2010, 16:49:52

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

15.09.2010, 19:23:46 via Website

Ich bin zwar nicht Jörg, darf aber vielleicht trotzdem antworten ;)

Der Nachteil ist, das man dann für Portrait/Landscape das gleiche Layout verwenden muss, und das die Neupositionierung der Views manchmal nicht korrekt funktioniert.
Wenn ersteres OK ist und zweiteres verifiziert wurde, kann diese Methode zu deutlich mehr Performance führen, ohne das man dafür Arbeit investieren muss.

Antworten
Gelöschter Account
  • Forum-Beiträge: 101

16.09.2010, 11:01:14 via Website

Ehrlich gesagt traue ich der ganzen Geschichte mit den ConfigChanges nicht so ganz. Wieso ist das normale ScreenOrientation-Handling so umständlich (Daten per onSaveInstance() in ein Bundle speichern und in der onCreate() wieder auslesen) wenn man stattdessen einfach die ConfigChanges für jede Activity ändern könnte und man sich um nichts dergleichen zu kümmern braucht (vorausgesetzt man benutzt das gleiche Layout für Portrait und Lanscape)?

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

16.09.2010, 21:33:00 via Website

Ich verstehe die Frage nicht;
im Vergleich zu configChanges ist die saveInstance() Methode "umständlicher", weil erstes keine Arbeit verursacht und zweiteres schon.

Ersteres ist für den Fall gedacht, das man das selbe(!) Layout verwendet, d.h. es wird nichts neu geladen, sondern nur neu positioniert; das kann vollautomatisch geschehen und ist daher der einfache (weil eingeschränkte) Fall, der aber nicht für jede denkbare Situation ausreichend ist, daher bedarf es einer zweiten Methode, die flexibleres Handling erlaubt und darum nicht automatisiert wird.

Antworten
Gelöschter Account
  • Forum-Beiträge: 101

17.09.2010, 11:01:13 via Website

Das macht ja alles sinn. Nur habe ich gelesen, dass es zum Beispiel unter Android 2.2 zu Problemen mit dem Layout kommen kann, wenn man es in einen Dock steckt.

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

17.09.2010, 12:11:48 via Website

Ich hab es so gelöst und das Projekt nochmals aus dem Repository installiert.


An die Mods: Ich bin ich im falschen Thread gelandet, bitte löschen!

— geändert am 17.09.2010, 12:13:22

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

17.09.2010, 19:04:56 via Website

Nur habe ich gelesen, dass es zum Beispiel unter Android 2.2 zu Problemen mit dem Layout kommen kann, wenn man es in einen Dock steckt.

Wie ich schon schrieb, kann man diese Erfahrung auch ohne Dock machen - muss man halt jeweils testen, wenn man configChanges nutzen will.
Meine Erfahrung ist: wenn es auf meinem Desire (2.2) läuft, dann tuts auch beim Kunden - jedenfalls gabs bislang kein Mecker ;)

Antworten
Gelöschter Account
  • Forum-Beiträge: 101

17.09.2010, 21:04:14 via Website

Ich werds auf jeden Fall bei meinen privaten Apps probieren. Da ists nicht so tragisch wie in der Firma, sollten wirklich mal Probleme auftreten

Antworten