Tabs usando somente uma Activity

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).

 

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s