分享

如何在FragmentTabHost添加tab后获取Fragment实例

 quasiceo 2015-10-01

想要用一个BaseFragment类,创建多个tab,然后给每个tab赋予不同的背景,主要部分代码如下:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//定义FragmentTabHost对象
    private MyFragmentTabHost mTabHost;
    //定义数组来存放Fragment界面
    private Class fragmentArray[] = {BaseFragment.class,BaseFragment.class,BaseFragment.class,BaseFragment.class,BaseFragment.class};
    //Tab选项卡的文字
    private String mTextviewArray[] = {"a", "b", "c", "d", "e"};
    //实例化TabHost对象,得到TabHost
    mTabHost = (SunnyFragmentTabHost)findViewById(android.R.id.tabhost);
    mTabHost.setup(this, getSupportFragmentManager(), R.id.realtabcontent);
    //得到fragment的个数
    int count = fragmentArray.length;
    for(int i = 0; i < count; i++){
        //为每一个Tab按钮设置图标、文字和内容
        TabHost.TabSpec tabSpec = mTabHost.newTabSpec(mTextviewArray[i]).setIndicator(getTabItemView(i));
        //将Tab按钮添加进Tab选项卡中
        mTabHost.addTab(tabSpec, fragmentArray[i], null);
        //设置Fragment的背景
        BaseFragment bf = (BaseFragment)getSupportFragmentManager().findFragmentByTag(mTextviewArray[i]);
        if(bf!=null)
            bf.setBackgroundResource(mBgImgs[i]);
    }

其中MyFragmentTabHost参考http://blog.csdn.net/jwzhangjie/article/details/35285779编写,主要是detach和attach部分改为了hide和show

然后在addTab(TabHost.TabSpec tabSpec, Class<?> clss, Bundle args)函数最后增加:



1
2
3
4
5
6
7
8
if(info.fragment==null){
        info.fragment = Fragment.instantiate(mContext,
                info.clss.getName(), info.args);
        FragmentTransaction ft = mFragmentManager.beginTransaction();
        ft.add(mContainerId, info.fragment, info.tag);
        ft.hide(info.fragment);
        ft.commit();
    }

但是最开始代码里面addTab后面的

1
BaseFragment bf = (BaseFragment)getSupportFragmentManager().findFragmentByTag(mTextviewArray[i]);
获取的始终为空,不知如何解决?

同样代码,在mTabHost.setOnTabChangedListener设置的Listener里,可以通过上述代码获得Fragment。

刚开始学Android,可能哪个地方代码没有看到,希望有人能指点,谢谢~

szmneo szmneo
发帖于 4个月前
1回/985阅

按票数排序  显示最新答案   共有1个答案 (最后回答: 2个月前 )

    0
  • justlinux justlinux 2个月前
    我也被这个问题困扰了,由于fragment是第三方的,我需要在添加到fragmenttabhost之后获取这个实例并且对这个fragment进行设置,但不知道如何获取实例

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多