我正在尝试使用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。我做错了什么?
答案 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);