Android的TabHost使用笔记

Android的TabHost使用笔记

    1. Activity继承自TabAcitvity的使用,目前TabActivity不推荐使用,官方已经不建议使用了
public class MainTabActivity extends TabActivity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		TabHost tabHost = getTabHost();
		LayoutInflater.from(this).inflate(R.layout.tab1,
				tabHost.getTabContentView(), true);
		LayoutInflater.from(this).inflate(R.layout.tab2,
				tabHost.getTabContentView(), true);
		tabHost.addTab(tabHost.newTabSpec("TAB1").setIndicator("线性布局")
				.setContent(R.id.layout01));
		tabHost.addTab(tabHost.newTabSpec("TAB2").setIndicator("相对布局")
				.setContent(R.id.layout03));
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main_tab, menu);
		return true;
	}

}
      xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainTabActivity" >

</RelativeLayout>
  1. Activity直接使用TabHost,这种比较常用,不过使用过程中会出现很多问题

先上正确的使用代码:

	@SuppressLint("NewApi")
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		// //ListView
		// ListView ls=(ListView) findViewById(R.id.listView1);
		// ls.setAdapter(new SimpleAdapter(this,getData(),R.layout.goods,
		// new String[]{"title","info","img"},new
		// int[]{R.id.title,R.id.info,R.id.imageView1}
		// ) );
		// set Adapter
		SimpleAdapter adapter = new SimpleAdapter(this, getData(),
				R.layout.goods, new String[] { "title", "info", "img" },
				new int[] { R.id.title, R.id.info, R.id.imageView1 });
		setListAdapter(adapter);
		setContentView(R.layout.activity_main);
		if (android.os.Build.VERSION.SDK_INT > 9) {
			StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
					.permitAll().build();
			StrictMode.setThreadPolicy(policy);
		}
		// data
		// 获取TabHost
		TabHost tabHost = (TabHost) findViewById(R.id.tabs);
		tabHost.setup();
		LayoutInflater.from(this).inflate(R.layout.hometab,
				tabHost.getTabContentView(), true);
		LayoutInflater.from(this).inflate(R.layout.categorytab,
				tabHost.getTabContentView(), true);
		tabHost.addTab(tabHost.newTabSpec("parent").setIndicator("首页",this.getResources().getDrawable(R.drawable.home_basic))
				.setContent(R.id.hometab));
		tabHost.addTab(tabHost.newTabSpec("catetory").setIndicator("分类",this.getResources().getDrawable(R.drawable.book_bookmark))
				.setContent(R.id.catetorytab));
}

xml代码:

    <TabHost
        android:id="@+id/tabs"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/white" >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical" >

            <TabWidget
                android:id="@android:id/tabs"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" >
            </TabWidget>
            <FrameLayout
                android:id="@android:id/tabcontent"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_weight="1">
            </FrameLayout>
        </LinearLayout>
    </TabHost>

[/java]

常见问题:

1.TabHost的Tab内容显示其他xml页面进行显示,结果提示id找不到,

错误提示:Could not create tab content because could not find view with id

原因:直接使用


        TabSpec homeSpec = tabHost.newTabSpec("parent");
         homeSpec.setIndicator("首页",
         this.getResources().getDrawable(R.drawable.home_basic));
         homeSpec.setContent(R.id.catetorytab);//这样赋值xml的视图ID,不能获取到值,需要先用LayoutInflater进行xml文件的解析并赋值给tabhost

代码如下:

tabHost.Setup();//注意必须在设置之下写

LayoutInflater.from(this).inflate(R.layout.categorytab,
                tabHost.getTabContentView(), true);
赞(0) 打赏
分享到: 更多 (0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏