FragmentTabHost的简单用法

经常使用RadioButton+ViewPager或RadioButton+事务的方式来切换Fragment的显示。于是换一种方式采用FragmentTabHost来进行实现,与RadioButton+ViewPager比较起来,代码会多一些但是省去了联动的设置。FragmentTabHost内部是使用事务来进行Fragment的切换的。
使用步骤:
1)写界面的布局文件
这里写图片描述

FrameLayout里面用来放Fragment,而FragmentTabHost里面放点击切换Fragment的选项卡(即Tab)。这里需要注意的是,网上有一些文章强调在为FrameLayout和FragmentTabHost指定ID的时候需要指定@android:id系统指定ID,其实不用,使用普通的ID即可。

2)准备好Fragment和Fragment所使用的布局文件
这里写图片描述

这里写图片描述

3)准备好选项卡的布局文件
这里写图片描述

这3个选项类似,可以看其中一个:
这里写图片描述
预览效果:
这里写图片描述

注意:FragmentTabHost允许使用文字,文字+图标和View作为选项卡。创建布局文件,将布局文件膨胀为View后将其作为作为选项卡。点击选项卡就可以切换第1步中FrameLayout内显示的Fragment了。需要特别注意的是,不能使用Button作为选项卡中被点击的内容。
另外如果使用selector作为选项卡的背景和前景效果时,被点选的选项卡selected为true。
这里写图片描述

这里写图片描述

4)布局相关工作结束,进入编码阶段
4.1)根据id获取FragmentTabHost对象:

 tabHost = (FragmentTabHost) findViewById(R.id.tabhost);
 initTabHost();

4.2) 设置的内容包括:Fragment显示在哪里,选项卡的标识和样子(文字,文字+图片,或View),选项卡与Fragment的对应关系,其它设置

private void initTabHost() {
        //要切换显示的所有Fragment
        List<Class> list = new ArrayList<Class>();
        list.add(CarControlFragment.class);
        list.add(CarStateFragment.class);
        list.add(CarAccountFragment.class);
        //选项卡的标识
        List<String> tags = Arrays.asList(
                            "控制", "状态", "账户");
        //选项卡使用View,layouts是这些3个选项卡样式各自的布局文件
        List<Integer> layouts = Arrays.asList(
                                R.layout.tab_view_1, 
                                R.layout.tab_view_2, 
                                R.layout.tab_view_3);
        //设置Fragment将在哪里显示(
        //在id为tabcontent的FrameLayout中显示)
        tabHost.setup(this, 
                      getSupportFragmentManager(), 
                      R.id.tabcontent);
        for (int i = 0; i < 3; i++) {
            //获得第i个选项卡的View
            View view = LayoutInflater.from(this)
                        .inflate(layouts.get(i), null);
            //创建第i个选项卡,该选项卡的标识为tags.get(i),
            //该选项卡的样式为view
            TabHost.TabSpec tab = tabHost.newTabSpec(
                       tags.get(i)).setIndicator(view);
            //建立选项卡和Fragment的对应关系,
            //当点击该选项卡时在FrameLayout中
            //显示list中第i个Fragment
            tabHost.addTab(tab, list.get(i), null);
            //其它设置 选项卡之间没有分割线
           tabHost.getTabWidget().setDividerDrawable(null);
        }

    }

默认FragmentTabHost会让第一个选项卡处于选中状态(selected==true),并在FrameLayout中显示第一个Fragment。可以通过setCurrentTab方法来指定默认选中的选项卡以及其对应的Fragment:

tabHost.setCurrentTab(idx);

最终运行效果为:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值