在叙述TabHost的使用之前,我们必须先知道TabActivity的生命周期,以了解主Activity中各个对象的实例化机制。
TabActivity中,只在第一次进入时走了onCreate()、onStart()、onResume()三个阶段,然后在退出该页面时走了onPause()、onStop()和onDestroy()两个阶段。其他时间无论其中的子Activity如何切换,都不会再进入TabActivity的生命周期。
而子Activity,再第一次创建的时候,都会走onCreate()、onStart()、onResume()三个阶段,期间在各子Activity中切换,经历了onPause()和onResume()两个阶段,然后在主TabActivity退出时经历onPause()、onStop()和onDestroy()三个阶段。大致了解下TabActivity生命周期,再次不做细述。
//需要被传递的类
- package com.snail.intentobject;
- import java.io.Serializable;
- /**
- * PersonSer
- *
- * @author http://write.blog.csdn.net/postedit
- */
- public class PersonSer implements Serializable {
- /**
- * serialVersionUID的作用是在修改实体类后,可以正常的序列化和反序列化,在此不多说,大家可以谷歌百度下。
- */
- private static final long serialVersionUID = -7620435178023928252L;
- private String name;
- private int age;
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public int getAge() {
- return age;
- }
- public void setAge(int age) {
- this.age = age;
- }
- }
- //TabActivity package com.example.lyktimi;
- import com.example.music.musicList;
- import com.example.music.musicNameList;
- import com.example.music.myMusicList;
- import com.example.music.netMusicList;
- import com.example.server.musicServer;
- import android.app.TabActivity;
- import android.content.Intent;
- import android.os.Bundle;
- import android.view.Menu;
- import android.view.View;
- import android.view.Window;
- import android.widget.RadioButton;
- import android.widget.TabHost;
- public class MainActivity extends TabActivity {
- private TabHost tabHost;
- private RadioButton radioButton1;
- private RadioButton radioButton2;
- private PersonSer personser;//定义传递的对象
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- requestWindowFeature(Window.FEATURE_NO_TITLE);
- setContentView(R.layout.main);
- this.tabHost = getTabHost();
- radioButton1 = (RadioButton)findViewById(R.id.rb_tab1);
- radioButton2 = (RadioButton)findViewById(R.id.rb_tab2);
- radioButton3 = (RadioButton)findViewById(R.id.rb_tab3);
- radioButton4 = (RadioButton)findViewById(R.id.rb_tab4);
- personSer = new Personser(); personSer.setName("Name1");
- Intent bdMusicIntent = new Intent(getApplicationContext(),tab1.class);//激活Activity
- // this.tabHost.addTab(this.tabHost.newTabSpec("选项卡1")
- .setIndicator("选项卡1")
- .setContent(bdMusicIntent));
- Intent netMusicIntent = new Intent(getApplicationContext(),tab2.class);//激活Activity
- // netMusicIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
- Bundle netbundle = new Bundle();
- netbundle.putString("parameter","parameter");//传递字符串参数
- netbundle.putParcelable("personSer",personSer);//传递对象
- netMusicIntent.putExtras(netbundle); this.tabHost.addTab(this.tabHost.newTabSpec("选项卡2") .setIndicator("选项卡2")
- .setContent(netMusicIntent));
- radioButton1.setOnClickListener(new mainRadio());
- radioButton2.setOnClickListener(new mainRadio());
- }
- class mainRadio implements android.view.View.OnClickListener{
- public void onClick(View v) {
- switch (v.getId()) {
- case R.id.rb_tab1:
- tabHost.setCurrentTab(0);
- break;
- case R.id.rb_tab2:
- tabHost.setCurrentTab(1);
- break;
- }
- }
- }
- public boolean onCreateOptionsMenu(Menu menu) {
- // Inflate the menu; this adds items to the action bar if it is present.
- getMenuInflater().inflate(R.menu.main,menu);
- return true;
- }
- //菜单项事件,每次点击菜单条目时调用
- // public boolean onOptionsItemSelected(MenuItem item) {
- //
- // switch (item.getItemId()) {
- // case R.id.findMusic:
- // Toast.makeText(getApplicationContext(),"正在查找",Toast.LENGTH_LONG).show();
- // getFile(path);
- // listInit();
- // break;
- //
- // default:
- // break;
- // }
- // return true;
- // }
- }
- <pre class="java" name="code"><?xml version="1.0" encoding="utf-8"?>
- <TabHost xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:id="@android:id/tabhost"
- >
- <LinearLayout
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:orientation="vertical"
- >
- <!-- 这个FrameLayout为TabWidget的内容 id必须写成@android:id/tabcontent的形式 -->
- <FrameLayout
- android:id="@android:id/tabcontent"
- android:layout_width="fill_parent"
- android:layout_height="0.0dip"
- android:layout_weight="1.0"
- >
- </FrameLayout>
- <!-- TabWidget这个组件的ID 必须是@android:id/tabs -->
- <TabWidget
- android:id="@android:id/tabs"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_weight="0.0"
- android:visibility="gone"
- >
- </TabWidget>
- <!-- android:background="#5f5f5f" -->
- <RadioGroup
- android:id="@+id/main_radioGroup"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="bottom"
- android:gravity="center_vertical"
- android:orientation="horizontal"
- >
- <RadioButton
- style="@style/tab_bottom_style"
- android:id="@+id/rb_tab1"
- android:checked="true"
- android:text="tab1"
- android:textSize="12sp"
- android:textColor="#ffffff"
- android:drawableTop="@drawable/tab_musiclist_selector"
- android:button="@null"
- />
- <RadioButton
- style="@style/tab_bottom_style"
- android:id="@+id/rb_tab2"
- android:text="tab2"
- android:textSize="12sp"
- android:textColor="#ffffff"
- android:drawableTop="@drawable/tab_mymusiclist_selector"
- android:button="@null"
- />
- </RadioGroup>
- </LinearLayout>
- </TabHost>
- //drawable文件夹下tab_mymusiclist_selector.xml文件 <?xml version="1.0" encoding="utf-8"?>
- <selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item
- android:drawable="@drawable/tab_net_press"
- android:state_focused="true"
- android:state_pressed="false"
- />
- <item
- android:drawable="@drawable/tab_net_nor"
- android:state_enabled="true"
- android:state_pressed="true"
- />
- <item
- android:drawable="@drawable/tab_net_nor"
- android:state_checked="true"
- android:state_enabled="true"
- />
- <item
- android:drawable="@drawable/tab_net_press"
- />
- </selector>
//选项卡2Activity(tab2)
- package com.example.music;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import com.example.lyktimi.R;
- import com.example.server.musicServer;
- import com.example.server.sharedPreferences;
- import android.app.Activity;
- import android.content.Intent;
- import android.os.Bundle;
- import android.view.View;
- import android.widget.AdapterView;
- import android.widget.AdapterView.OnItemClickListener;
- import android.widget.ListView;
- import android.widget.SimpleAdapter;
- public class netMusicList extends Activity {
- private TextView text;
- private PersonSer person;
- protected void onCreate(Bundle savedInstanceState) {
- // TODO Auto-generated method stub
- super.onCreate(savedInstanceState);
- setContentView(R.layout.net_music_activity);
- }
- <pre class="java" name="code">/**
- * 得到MainActivity传来的对象实例
- */
- Intent intent = getIntent();
- Bundle bundle = intent.getExtra();
- person = (PersonSer)intent.getSerializableExtra("personSer");
- String str = bundle.getString("parameter");//取数据
- Log.i("TAG",str);
- person = intent.getSerializableExtra("personSer");//获得对象
- Log.i("TAG",person.getName);//显示对象内容