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

创建TabHost有两种方式

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

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

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

 

第一,继承Activity 

public class TabDemoActivity extends Activity
{
	@Override
	protected 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
{
	@Override
	protected 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
{
	@Override
	protected void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.test);
                // 注意id
		TabHost 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>


你可能感兴趣的:(android,xml,layout,Class,encoding)