Android fragment 内部嵌套tabhost组件

五月就这样过去了。

月末上点干货。

干货当然是没人分享过的东东O(∩_∩)O~

Android fragment组件的推出是为了替代tabhost组件的。

但有时候由于项目需要,我们需要在fragment内部嵌套tabhost。

fragment是一个可以左滑右滑以及点击切换的组件,而tabhost只能点击切换。

这样的话,从view的touch分发事件角度来看,fragment内部嵌套tabhost是可行的。


目前网络可以搜到的方案是:

onCreateView() 方法里是 TabHost 的主要部分,获取TabHost的方法是先用 LayoutInflater抽象类获取布局对象,然后用布局对象获取TabHost,因为不是继承Activity,所以不能直接用getViewById()。
最后tabHost.setup()。

但这样还是会有问题,tab布局出来了,但是对应的内容不显示。


实现这一效果的关键在于LocalActivityManager管理类。

但要使用该方法,页面必须继承ActivityGroup。

Fragment不属于ActivityGroup,但它可以通过getActivity()获取嵌套它的Activity。

于是,

localActivityManager = new LocalActivityManager(getActivity(), true);
		localActivityManager.dispatchCreate(savedInstanceState);
		tabHost.setup(localActivityManager);

关于LocalActivityManager的详细介绍,可以参考blog : http://blog.csdn.net/caowenbin/article/details/5876019


好了,别忘了在其他生命周期执行下相关操作:

	@Override
	public void onResume() {
		super.onResume();
		localActivityManager.dispatchResume();
	}

	@Override
	public void onPause() {
		super.onPause();
		localActivityManager.dispatchPause(getActivity().isFinishing());
	}


最终效果图:




说再多也没有源码来的实在:

源码地址:


  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值