对于TabHost中setContent()使用Intent的一点总结

来源:互联网 发布:知乎欧美乐坛 编辑:程序博客网 时间:2024/05/23 11:46

创建TabHost有两种方式

第一种:继承TabActivity,使用getTabHost初始化。

第二种:继承Activity,使用this.findViewById(R.id.tabhost)初始化。

但是,当我们的setContent()中的参数是Intent时,也就是他的tab包含的是Activity而不是其他的布局或者组件时,之前正常的代码会发生错误,这里我说一下一点总结吧

 

第一,继承Activity 

public class TabDemoActivity extends Activity{@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.test);TabHost tabHost = (TabHost) findViewById(R.id.tabhost);                // 注意下面这段LocalActivityManager mLocalActivityManager = new LocalActivityManager(this, false);        mLocalActivityManager.dispatchCreate(savedInstanceState);        tabHost.setup(mLocalActivityManager);    tabHost.addTab(tabHost.newTabSpec("one").setIndicator("tab1").setContent(new Intent(this, FirstActivity.class)));tabHost.addTab(tabHost.newTabSpec("two").setIndicator("tab2").setContent(new Intent(this, SecondActivity.class)));tabHost.addTab(tabHost.newTabSpec("three").setIndicator("tab3").setContent(new Intent(this, ThirdlyActivity.class)));}}

第二,继承ActivityGroup

public class TabDemoActivity extends ActivityGroup{@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.test);TabHost tabHost = (TabHost) findViewById(R.id.tabhost);// 注意下面这段                tabHost.setup(this.getLocalActivityManager());    tabHost.addTab(tabHost.newTabSpec("one").setIndicator("tab1").setContent(new Intent(this, FirstActivity.class)));tabHost.addTab(tabHost.newTabSpec("two").setIndicator("tab2").setContent(new Intent(this, SecondActivity.class)));tabHost.addTab(tabHost.newTabSpec("three").setIndicator("tab3").setContent(new Intent(this, ThirdlyActivity.class)));}}

为什么需要调用setup方法,官方给出的解释,setup方法主要是初始化了TabConnect和TabWidget

 If you are using setContent(android.content.Intent), this must be called since the activityGroup is needed to launch the local activity. This is done for you if you extend TabActivity.

上面这两种代码的对应XML,注意除了tabhost的id可以自定义外,其他的必须使用系统的id

<?xml version="1.0" encoding="utf-8"?><TabHost xmlns:android="http://schemas.android.com/apk/res/android"    android:id="@+id/tabhost"    android:layout_width="fill_parent"    android:layout_height="fill_parent" >    <LinearLayout        android:layout_width="fill_parent"        android:layout_height="fill_parent"        android:orientation="vertical" >        <FrameLayout            android:id="@android:id/tabcontent"            android:layout_width="fill_parent"            android:layout_height="wrap_content"            android:layout_weight="1.0"            android:padding="5dp" />        <TabWidget            android:id="@android:id/tabs"            android:layout_width="fill_parent"            android:layout_height="wrap_content"            android:layout_weight="0.0" >        </TabWidget>    </LinearLayout></TabHost>


第三,继承TabActivity

public class TabDemoActivity extends TabActivity{@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.test);                // 注意idTabHost tabHost = (TabHost) findViewById(android.R.id.tabhost);    tabHost.addTab(tabHost.newTabSpec("one").setIndicator("tab1").setContent(new Intent(this, FirstActivity.class)));tabHost.addTab(tabHost.newTabSpec("two").setIndicator("tab2").setContent(new Intent(this, SecondActivity.class)));tabHost.addTab(tabHost.newTabSpec("three").setIndicator("tab3").setContent(new Intent(this, ThirdlyActivity.class)));}}

第三种使用的XML如下

<?xml version="1.0" encoding="utf-8"?><TabHost xmlns:android="http://schemas.android.com/apk/res/android"    android:id="@android:id/tabhost"    android:layout_width="fill_parent"    android:layout_height="fill_parent" >    <LinearLayout        android:layout_width="fill_parent"        android:layout_height="fill_parent"        android:orientation="vertical" >        <FrameLayout            android:id="@android:id/tabcontent"            android:layout_width="fill_parent"            android:layout_height="wrap_content"            android:layout_weight="1.0"            android:padding="5dp" />        <TabWidget            android:id="@android:id/tabs"            android:layout_width="fill_parent"            android:layout_height="wrap_content"            android:layout_weight="0.0" >        </TabWidget>    </LinearLayout></TabHost>