0

I'm trying to have a FragmentTabHost and set custom views for tabs. The FragmentTabHost is inflated inside a Fragment. This is the Fragment code:

 @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;
}

And here's the layout:

<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>

This is the FriendsTabFragment inflating code:

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

    return root;
}

This is the custom view tab (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>

If I run the project with this configuration it crashes on mTabHost.addTab() method saying that the specified child already has a parent. If I remove the LinearLayout around the ImageView inside the custom view tab, it works! But I need some customizations so I need that LinearLayout there. What am I doing wrong?

edoardotognoni
  • 2,752
  • 3
  • 22
  • 31

1 Answers1

0

Change your layout to this one:

<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>

and also change:

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

  friends.setIndicator(view);

to

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

  friends.setIndicator(tab);
mmlooloo
  • 18,937
  • 5
  • 45
  • 64