2012-03-30 8 views
2

Ich habe meine TabActivity erfolgreich in eine FragmentActivity konvertiert, wobei der Tab Content Fragments ist. Ich habe zwei Probleme:Probleme mit Android FragmentAktivität und Tabs

  1. Jede meiner Registerkarten enthalten EditText. Wenn ich den Wert eines EditText auf TAB1 ändere, zu TAB2 wechseln und dann wieder zu TAB1 wechseln, wurde der Wert von EditText zurückgesetzt.

  2. Wenn ich eine neue Aktivität auf einer meiner Tab-Fragmente starte und dann zu der vorhandenen FragmentActivity zurückkehre, verschwindet der Tab-Inhalt. Ich war ursprünglich dieses Problem habe, wenn ein TabHost verwendet, weshalb ich die Zeit damit verbracht, alles zu Fragmenten ...

In Bezug auf # 1, konvertieren Ich gehe davon aus dem Problem mit savedInstanceState zu tun hat. Ich folgte Google example genau das folgende in onCreate() meines FragmentActivity mit:

initialiseTabHost(savedInstanceState); 
if (savedInstanceState != null) { 
    mTabHost.setCurrentTabByTag(savedInstanceState.getString("tab")); 
} 

Zusätzlich ist hier mein onSaveInstanceState() Methode meiner FragmentActivity:

protected void onSaveInstanceState(Bundle outState) { 
    outState.putString("tab", mTabHost.getCurrentTabTag()); 
    super.onSaveInstanceState(outState); 
} 

Hier ist, was eine meiner Registerkarte Fragments sieht aus wie:

Sollte ich etwas anderes tun? Ich habe ungefähr 15 EditText Felder auf dem Bildschirm. Muss ich diese Werte irgendwie speichern und so einstellen, dass die Felder beim nächsten Mal wieder mit diesen Werten gefüllt werden?

In Bezug auf # 2 habe ich keine Ahnung, was ich noch tun kann. Hat jemand irgendwelche Vorschläge?

Danke!

Antwort

2

Ich kann nur die erste Frage beantworten. Ja, Sie müssen den Inhalt jedes Editiertexts manuell speichern, wenn Sie es wiederherstellen möchten. Wenn sie nicht über Anwendungsläufe hinweg beibehalten werden müssen, speichern Sie sie im Paket unter onSaveInstanceState und stellen Sie sie unter onCreate und/oder onRestoreInstanceState wieder her. Wenn die Werte persistent sein sollen, verwenden Sie SharedPreferences oder schreiben Sie sie in eine andere Datei oder Datenbank. Präferenzen sind wahrscheinlich am einfachsten.

+0

Ich werde das ausprobieren, danke. Es war einfacher, TabHost zu verwenden, das sich die Werte für Sie auf jeder Registerkarte merkt, aber jetzt ist es veraltet, so dass es keinen Sinn mehr macht, es zu verwenden. Glücklicherweise habe ich auf jeder Registerkarte eine statische Anzahl von EditText-Feldern. Dies würde jedoch mit einer dynamischen Anzahl von EditText-Feldern schwierig werden ... – littleK