FragmentTabHost:指定的子级已有父级

时间:2014-10-03 09:33:15

标签: android android-fragments android-tabhost android-tabs

我正在尝试使用FragmentTabHost并为标签设置自定义视图。 FragmentTabHost在片段内膨胀。这是片段代码:

 @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View root = inflater.inflate(R.layout.fragment_friends, container, false);
    mTabHost = (FragmentTabHost) root.findViewById(android.R.id.tabhost);
    mTabHost.setup(getActivity(), getChildFragmentManager(),android.R.id.tabcontent);

    TabHost.TabSpec friends = mTabHost.newTabSpec(FriendsTabFragment.TAG);

    View tab = inflater.inflate(R.layout.friends_fragment_custom_tab,null);

    ImageView view = (ImageView) tab.findViewById(R.id.tab_icon);
    view.setImageResource(R.drawable.categoria_amici);
    friends.setIndicator(view);

    mTabHost.addTab(friends, FriendsTabFragment.class, null);
    return root;
}

这是布局:

<android.support.v4.app.FragmentTabHost xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@android:id/tabhost"
     android:layout_width="match_parent"
     android:layout_height="match_parent" >

<LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >

    <FrameLayout
            android:id="@android:id/tabcontent"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"/>

    <TabWidget
            android:id="@android:id/tabs"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="0"
            android:layout_marginBottom="-4dp"/>

</LinearLayout>

</android.support.v4.app.FragmentTabHost>

这是FriendsTabFragment充气代码:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View root = inflater.inflate(R.layout.fragment_friends_tab, container,false);

    return root;
}

这是自定义视图标签(R.layout.friends_fragment_custom_tab):

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:orientation="vertical"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:background="@android:color/black">

<ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/tab_icon"/>
</LinearLayout>

如果我使用此配置运行项目,它会在mTabHost.addTab()方法崩溃,说明指定的子项已经有父项。如果我在自定义视图选项卡中删除ImageView周围的LinearLayout,它就可以了!但我需要一些自定义,所以我需要那个LinearLayout。我做错了什么?

1 个答案:

答案 0 :(得分:0)

将您的布局更改为:

<android.support.v4.app.FragmentTabHost xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@android:id/tabhost"
     android:layout_width="match_parent"
     android:layout_height="match_parent" >

<LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >

    <TabWidget
            android:id="@android:id/tabs"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="0"
            android:layout_marginBottom="-4dp"/>

    <FrameLayout
        android:id="@android:id/tabcontent"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_weight="0" />

    <FrameLayout
        android:id="@+id/realtabcontent"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1" />


</LinearLayout>

</android.support.v4.app.FragmentTabHost>

也改变了:

  mTabHost.setup(getActivity(), getChildFragmentManager(),android.R.id.tabcontent);

  friends.setIndicator(view);

  mTabHost.setup(getActivity(), getChildFragmentManager(),R.id.realtabcontent);

  friends.setIndicator(tab);