Esse exemplo ajuda no caso de voce ter varias tabs, e quiser salvar o conteudo de todas ao mesmo tempo. (uma solucao é essa. A outra seria criar classe com metodos e objetos estáticos o qual vc set esses objetos e os mesmos sao retornados pra vc a hora que quiser[post sobre isso a caminho…]).
Vamos la.
no seu TabHost.
package blog.teste.tab; import android.app.ActivityGroup; import android.content.Intent; import android.content.res.Resources; import android.os.Bundle; import android.widget.TabHost; /** * Classe TesteTab herda de ActivityGroup. Essa classe pai, eh usada, * porque possibilita a visualizacao de varias Activities dentro dela ***/ public class TesteTab extends ActivityGroup { static TabHost tabHost; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Resources res = getResources(); tabHost = (TabHost)findViewById(R.id.tabHost); tabHost.setup(this.getLocalActivityManager()); TabHost.TabSpec spec; Intent i; // * Exemplo de Tabs usando somente um .xml e somente uma Activity. Ou seja, usamos a mesma Tab1.xml e a mesma Tab1.java //Tab #1 i = new Intent().setClass(this, Tab1.class); i.putExtra("tab","0"); spec = tabHost.newTabSpec("0").setIndicator("Tab 1",res.getDrawable(R.drawable.icon) ).setContent(i); tabHost.addTab(spec); //Tab #2 i = new Intent().setClass(this, Tab1.class); i.putExtra("tab","1"); spec = tabHost.newTabSpec("1").setIndicator("Tab 2",res.getDrawable(R.drawable.icon) ).setContent(i); tabHost.addTab(spec); //Tab #3 i = new Intent().setClass(this, Tab1.class); i.putExtra("tab","2"); spec = tabHost.newTabSpec("2").setIndicator("Tab 3",res.getDrawable(R.drawable.icon) ).setContent(i); tabHost.addTab(spec); //Tab #4 i = new Intent().setClass(this, Tab1.class); i.putExtra("tab","3"); spec = tabHost.newTabSpec("3").setIndicator("Tab 4",res.getDrawable(R.drawable.icon) ).setContent(i); tabHost.addTab(spec); //Setta a tab a ser carrega ao iniciar a tabhost tabHost.setCurrentTab(0); } }
o que que acontece ali em cima??
eu tenho várias Tabs. E ao clicar em uma tab, é passado uma variavel para ela. essa variavel pode ser verificada na propria Activity assim que carregada.
Mais ou menos assim…
package blog.teste.tab; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.widget.TextView; /** * super.{@link Activity} * */ public class Tab1 extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.tab1); // Pega a intent Intent i = getIntent(); //Pega a String (Extra) da Intent String tabContent = i.getStringExtra("tab"); //Instancia o LinearLayout do .xml R.layout.tab1 TextView text = (TextView)findViewById(R.id.txtText); //Setta o background da pagina de acordo com o conteudo da String tabContent if(tabContent.equalsIgnoreCase("0")) text.setText("BLOGANDO TAB 0"); else if(tabContent.equalsIgnoreCase("1")) text.setText("BLOGANDO A PRIMEIRA TAB\nTAB 1"); else if(tabContent.equalsIgnoreCase("2")) text.setText("BLOGANDO A SEGUNDA TAB\nTAB 2"); else if(tabContent.equalsIgnoreCase("3")) text.setText("BLOGANDO A TERCEIRA TAB\nTAB 3"); } }
Aqui em cima a Activity recebe o parametro da tab, e dependendo do conteudo desse objeto seta o conteudo do TextView.
O que poderia ser feito, ao inves de settar o conteudo do Textview, setaria o setContentView(R.layout.tab1); com os diferentes layouts os quais voce criou..
por ultimo a classe Tab1.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:background="#ffff00" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="TENTATIVA DE BLOG!!1" android:id="@+id/txtText" android:textSize="15dp" android:textStyle="bold" android:textColor="#000000" /> <EditText android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/edtNome" /> </LinearLayout>
Tambem o TabHost main.xml
<?xml version="1.0" encoding="utf-8"?> <TabHost xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/tabHost" > <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <FrameLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@android:id/tabcontent" android:background="#ffffff" android:layout_weight="1" /> <TabWidget android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@android:id/tabs" android:background="#00ffff" android:layout_weight="0 " /> </LinearLayout> </TabHost>
e Manifest….
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="blog.teste.tab" android:versionCode="1" android:versionName="1.0"> <uses-sdk android:minSdkVersion="8" /> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".TesteTab" android:label="@string/app_name" android:theme="@android:style/Theme.NoTitleBar" android:configChanges="orientation|keyboardHidden" android:screenOrientation="portrait"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".Tab1" android:label="TAB WIDGET 1" > </activity> </application> </manifest>
ps – Lembrando que esse seria um WorkAround. Eu recomendo mesmo usar uma classes com objetos e metodos estaticos (em breve um post sober esse assunto).