Drehen des Tablets erzeugt Grafikprobleme, evtl. Zustand speichern bzw. Neuzeichnen nötig?

  • Antworten:7
Stefan M.
  • Forum-Beiträge: 6

05.03.2014, 10:54:09 via Website

Hallo,

ich programmiere gerade an einer Android-App und habe Probleme, wenn ich mein Entwicklungs-Tablet drehe.

Zum Beispiel habe ich in der ActionBar drei Navigations-Tabs, die jeweils einen Test-String zu Beginn eines LinearLayouts zeichnen. Wechsle ich den Tab, ändert sich der String. Soweit alles in Ordnung.

Drehe ich jedoch das Tablet, werden alle Strings übereinander gezeichnet. Wechsle ich nun die Activity und kehre wieder zur Activity mit den Navigations-Tabs zurück, ist das Verhalten wieder in Ordnung.

Vermutlich muss ich also vor dem Drehen den Zustand speichern bzw. das Drehen so abfangen, dass der Bildschirm neu aufgebaut wird.

Hat jemand einen Tipp für mich?


Danke und viele Grüße

stem

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

05.03.2014, 11:06:03 via Website

Es scheint du hast kein Grundlagen wissen, jede Activity oder Fragment durchläuft einen Lifecycle. Die Komponenten stellen entsprechende Methoden bereit um das ganze zu speichern und zu laden. Viel mehr kann man zu deiner durchaus wagen Beschreibung echt nicht sagen....

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

Antworten
Stefan M.
  • Forum-Beiträge: 6

05.03.2014, 14:52:59 via Website

Okay, hier noch einmal ausführlicher:

In der ActionBar füge ich drei Tabs ein (gemäß Anleitung der offiziellen Android-Developer-Seite zur ActionBar mit TabListener und drei Fragmenten).



Sobald ich das Gerät drehe, wird Tab 2 auf Tab 1 gezeichnet, da dieses vor dem Drehen sichtbar war. Auch Tab 3 wird auf Tab 1 gezeichnet.


Stefan M.

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

05.03.2014, 14:58:20 via Website

Ich würde da suchen wo du die Tabs zusammenbaust, hier scheint was falsch zu sein. Hast du ein anderes Layout nach dem Drehen ?

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

Antworten
Andreas S.
  • Forum-Beiträge: 76

05.03.2014, 21:26:51 via Website

Ich hatte mal ein ähnliches Problem. Bei mir lag das am TabListener. Villeicht hilft dir das hier weiter:

1private class MyTabListener implements ActionBar.TabListener
2{
3 private Fragment mFragment;
4 private FragmentActivity mActivity;
5 private String mTag;
6
7 public MyTabListener(FragmentActivity activity, String tag )
8 {
9 mActivity = activity;
10 mTag = tag;
11 }
12
13 @Override
14 public void onTabReselected( Tab tab, FragmentTransaction ft )
15 {
16
17 }
18
19 @Override
20 public void onTabSelected(Tab tab, FragmentTransaction ft )
21 {
22 mFragment = mActivity.getSupportFragmentManager().findFragmentByTag(mTag);
23 if( mFragment == null ) {
24 mFragment = Fragment.instantiate(mActivity, mClass.getName());
25 ft.add(R.id.content, mFragment, mTag);
26 } else
27 ft.attach(mFragment);
28
29 }
30
31 @Override
32 public void onTabUnselected( Tab tab, FragmentTransaction ft )
33 {
34 if (mFragment != null)
35 ft.detach(mFragment);
36 }
37}

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

05.03.2014, 21:29:00 via Website

Wann das deine Standart TabListener klasse ist, dann fehlen aber die Komentare und Erklärungen, damit man es besser versteht.
Was zb. ist der String Tag?

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Andreas S.
  • Forum-Beiträge: 76

05.03.2014, 22:22:18 via Website

Wenn man einen Tag angibt beim Hinzufügen eines Fragments zum FragmentManager, kann man über den Tag die Instanz wiederfinden (zB nach Orientierungswechsel des Gerätes)

Habe eben ein Beispiel erstellt, das sollte wohl etwas mehr helfen:

file-upload.net/download-8685007/Tabs.zip.html

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

05.03.2014, 22:42:29 via App

Ich hab deine Klasse schon verstenden...
Sollte nur den Denkanstoss zur Doku erstllung sein.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten