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

szmneo 发布于 2015/05/29 18:18
阅读 7K+
收藏 0

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


//定义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)函数最后增加:



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后面的

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

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

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

加载中
0
justlinux
justlinux
我也被这个问题困扰了,由于fragment是第三方的,我需要在添加到fragmenttabhost之后获取这个实例并且对这个fragment进行设置,但不知道如何获取实例
0
丶轩阳乄
丶轩阳乄
最开始打开的时候获取的默认的那个tab总是为空的,需要等上一下才能获取到,但切换到别个tab是可以获取到的
0
丶轩阳乄
丶轩阳乄

贴个代码你:private Fargment f;

在onCreat()中:

final Handler hand = new Handler() {

@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
f = getSupportFragmentManager().findFragmentByTag("TAG1");//TAG1是-->newTabSpec("TAG1")
Log.e("aaaa", "=====获得的view1是:=====" + f);
}
};
new Thread() {
@Override
public void run() {
try {
Thread.sleep(1500);//休眠1.5s后就能获取到了
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Message msg = hand.obtainMessage();
hand.sendMessage(msg);
}
}.start();
返回顶部
顶部