/ / Android Eclipse, zwei Aktivitäten auf zwei verschiedenen Registerkarten, ruft onCreate () auf! - Android, Eclipse, Android-Aktivität, Android-Tabhost

Android Eclipse, zwei Aktivitäten auf zwei verschiedenen Tabs, ruft onCreate () auf! - Android, Eclipse, Android-Aktivität, Android-Tabhost

Ich habe 2 Aktivitäten, sagen wir Activity1 und Activity2. Ich habe diese 2 in 2 separate Tabs unter einem TabHost hinzugefügt.

Jedes Mal, wenn ich auf die gewünschte Registerkarte drücke, um den Inhalt anzuzeigen, wird onCreate () für jede Aktivität aufgerufen und startet die Aktivität neu! Warum das? Wie kann ich das verhindern?

Vielen Dank.

Code aus der TabHostActivity-Klasse:

package zt.ztactive;

import android.app.TabActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TabHost;
import android.widget.TabHost.TabSpec;

public class TabHostActivity extends TabActivity {

TabHost tabHost;

/** Called when the activity is first created. */

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.tabwindow);

/** TabHost will have Tabs */
tabHost = (TabHost)findViewById(android.R.id.tabhost);

/** TabSpec used to create a new tab.
* By using TabSpec only we can able to setContent to the tab.
* By using TabSpec setIndicator() we can set name to tab. */

/** tid1 is firstTabSpec Id. Its used to access outside. */
TabSpec firstTabSpec = tabHost.newTabSpec("tid1");
TabSpec secondTabSpec = tabHost.newTabSpec("tid1");

/** TabSpec setIndicator() is used to set name for the tab. */
/** TabSpec setContent() is used to set content for a particular tab. */
firstTabSpec.setIndicator("First Tab Name").setContent(new Intent(this,Activity1.class));
secondTabSpec.setIndicator("Second Tab Name").setContent(new Intent(this,Activity2.class));

/** Add tabSpec to the TabHost to display. */
tabHost.addTab(firstTabSpec);
tabHost.addTab(secondTabSpec);
}

}

Antworten:

4 für die Antwort № 1

Können Sie Code zeigen, wie Sie ihn verwenden?Aktivitäten in Ihrem Tabhost. Im Idealfall würden die Aktivitäten nach dem Erstellen der Registerkarte onResume und nicht onCreate aufrufen, da die Aktivitäten nicht zerstört werden, wenn Sie von einer Registerkarte zur anderen wechseln.


1 für die Antwort № 2

Um Speicher zu erhalten, werden nur wenige Aktivitäten an einem Punkt geladen. Da eine Aktivität nicht sichtbar ist, wenn die Registerkarte nicht angezeigt wird, ist die Aktivität zerstört.

Entweder sollten Sie nicht für jede Registerkarte eine Aktivität erstellen, sondern für jede Registerkarte in derselben Aktivität unterschiedliche Ansichten haben, oder Sie sollten den Status der Aktivität für den Zeitpunkt speichern, an dem sie erneut geladen wird.

Es gibt ein kleines Beispiel, wie man einen Tabhost ohne Aktivitäten erstellt: http://dewful.com/?p=15


1 für die Antwort № 3

Ersetzen Sie dies TabSpec firstTabSpec = tabHost.newTabSpec ("tid1");
TabSpec secondTabSpec = tabHost.newTabSpec ("tid1"); mit:

TabSpec firstTabSpec = tabHost.newTabSpec ("tid1");
TabSpec secondTabSpec = tabHost.newTabSpec ("tid2");


0 für die Antwort № 4

Das Problem für mich war das gleiche wie das, was PravinCG oben beschrieben hat. Stellen Sie sicher, dass die Tags in allen TabSpecs eindeutig sind, löste das Problem einfach!