在Tabhost中获取片段为空

时间:2014-07-03 05:14:19

标签: java android android-fragments android-tabhost

我用TabHost创建了一个tab容器,布局xml文件如下所示:

<TabHost
    android:id="@android:id/tabhost"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <TabWidget
        android:id="@android:id/tabs"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
    </TabWidget>

    <FrameLayout
        android:id="@android:id/tabcontent"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginTop="60dip" >

        <fragment
            android:id="@+id/tab1"
            android:name="com.test.Tab1Fragment"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

        <fragment
            android:id="@+id/tab5"
            android:name="com.test.Tab5Fragment"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    </FrameLayout>
</TabHost>

在MainActivity中,我初始化并在onCreate回调中将标签添加到活动中,

tabHost = (TabHost) findViewById(android.R.id.tabhost);
tabHost.setup(); 
tabHost.addTab(tabHost.newTabSpec("tab1").setIndicator(mRes.getString(R.string.tab1)).setContent(R.id.tab1));
tabHost.addTab(tabHost.newTabSpec("tab5").setIndicator(mRes.getString(R.string.tab5)).setContent(R.id.tab5));

在更改的选项卡上,我想找到当前片段,并在显示当前片段时执行一些初始化。

private OnTabChangeListener tabChangedListener = new OnTabChangeListener() {
        public void onTabChanged(String tabid) {
            Log.d(TAG, "tab changed " + tabid);
            currentTab = tabid;
            TabChangeCallback currentFragment = (TabChangeCallback) getFragmentManager().findFragmentByTag(currentTab);
            if(currentFragment != null) {
                currentFragment.onTabChanged(currentTabIndex);
            } else {
                Log.d(TAG, "get fragment null ");
            }   
        }
    };

问题是为什么getFragmentManager().findFragmentByTag(currentTab)返回null,我无法调用片段init代码。谢谢你的帮助。

2 个答案:

答案 0 :(得分:2)

我认为如果你只处理Tabhost中的片段,那么你最好使用FragmentTabHost。它将更加优化和轻松。

Example

通过标记 - link

获取子片段

答案 1 :(得分:0)

这个问题是因为在调用OnTabChnaged时没有创建fragemnt。 Please check my answer here