自己在使用TabHost的过程中由于时间久和自己就理解不深的缘故,在获取到tabHost后进行addTab操作时经常遇到空指针异常的缘故,在这里做一个总结
1.当我们直接让Activity继承自TabActivty时:
- 需要在layout布局文件中指定一个TabHost控件的ID
- 在activity中使用getTabHost()得到tabhost控件对象
2.当我们的activity不直接继承自TabActivity时,也不用intent填充fragment时
- 需要通过findViewById获得tabHost控件,这时layout布局中并不指定id
- 需要在使用tabHost之前调用tabHost.setup()进行初始化。重要的事情说三遍,如果不调用该函数则会出现空指针异常
- 调用tabHost.setup()进行初始化
- 调用tabHost.setup()进行初始化
- 调用tabHost.setup()进行初始化
在这种情况下并不能直接在addTab的时候将其他的activity嵌入到当前的tab页面中,系统还是提示空指针异常比如:
tabHost.addTab(tabHost.newTabSpec("tab1").setIndicator("第一").setContent(new Intent(this,Act1.class)));
tabHost.addTab(tabHost.newTabSpec("tab2").setIndicator("第二").setContent(new Intent(this,Act2.class)));
tabHost.addTab(tabHost.newTabSpec("tab3").setIndicator("第三").setContent(new Intent(this,Act3.class)));
但是还会提出一个建议:
Did you forget to call ‘public void setup(LocalActivityManager activityGroup)‘?
这告诉我们要调用tabHost的有参方法。但是该方法的参数只有通过
getLocalActivityManager()函数得到,该函数却是ActivityGroup才有的,所以请看第三条
3.当我们的activity不直接继承自TabActivity时,需要用intent填充fragment时
- activity需要继承自ActivityGroup
- 通过findViewById获得tabHost
- 在使用tabHost之前要调用tabHost.setup(getLocalActivityManager());
所以综合来看,如果要使用tabHost,那么直接继承自TabActivity是最方便的方法,不过需要在layout布局文件中指定tabHost控件的ID为android:id/tabhost(注意大小写),并且在activity中直接通过getTabHost()方法获取到tabHost对象
时间: 2024-12-15 02:49:40