更新时间:2023-12-03 21:30:58
下面的答案。我是混合Android的TabHost的支持库的FragmentTabHost。两个不同的东西!
公共类ActivityFragment扩展片段实现TabHost.OnTabChangeListener {
私有静态最后弦乐FOLLOWING_SPEC =下面的;
私有静态最后弦乐YOU_SPEC =你;私人FragmentTabHost tabHost;公共ActivityFragment(){}@覆盖
公共查看onCreateView(LayoutInflater充气器,容器的ViewGroup,
捆绑savedInstanceState){ 查看查看= inflater.inflate(R.layout.fragment_activity,集装箱,FALSE); tabHost =(FragmentTabHost)view.findViewById(R.id.tabhost);
tabHost.setup(getActivity(),getChildFragmentManager(),android.R.id.tabcontent); tabHost.addTab(tabHost.newTabSpec(FOLLOWING_SPEC).setIndicator(继),FollowingActivityFragment.class,NULL);
tabHost.addTab(tabHost.newTabSpec(YOU_SPEC).setIndicator(您),YouActivityFragment.class,NULL);
tabHost.setCurrentTab(0); 返回视图。
} @覆盖
公共无效onTabChanged(String s)将{ }
}
I am using TabHost inside Fragment to create tabs. The problem I run into is TabSpec's setContent()
. I need to set it so that it nests another fragment under the <FrameLayout>
.
Do I uses getChildFragmentManager()
to do this? How do I do so?
Xml Layout:
<LinearLayout android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<TabWidget android:id="@android:id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0"
android:orientation="horizontal"
/>
<FrameLayout android:id="@android:id/tabcontent"
android:layout_width="match_parent"
android:layout_height="0dp"/>
<FrameLayout android:id="@+id/following"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
<FrameLayout android:id="@+id/you"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
</LinearLayout>
Fragment class:
public class ActivityFragment extends Fragment implements TabHost.OnTabChangeListener {
private static final String FOLLOWING_SPEC = "following";
private static final String YOU_SPEC = "you";
private TabHost tabHost;
public ActivityFragment(){}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_activity, container, false);
tabHost = (TabHost)view.findViewById(android.R.id.tabhost);
tabHost.setup();
TabHost.TabSpec followingSpec = tabHost.newTabSpec(FOLLOWING_SPEC);
followingSpec.setIndicator("Following");
followingSpec.setContent(); // <===Need to set content to fragment
TabHost.TabSpec youSpec = tabHost.newTabSpec(YOU_SPEC);
youSpec.setIndicator("You");
tabHost.addTab(followingSpec);
tabHost.addTab(youSpec);
tabHost.setCurrentTab(0);
return view;
}
@Override
public void onTabChanged(String s) {
}
}
Here's the answer. I was mixing android's TabHost with the support library's FragmentTabHost. Two different things!
public class ActivityFragment extends Fragment implements TabHost.OnTabChangeListener {
private static final String FOLLOWING_SPEC = "following";
private static final String YOU_SPEC = "you";
private FragmentTabHost tabHost;
public ActivityFragment(){}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_activity, container, false);
tabHost = (FragmentTabHost)view.findViewById(R.id.tabhost);
tabHost.setup(getActivity(), getChildFragmentManager(), android.R.id.tabcontent);
tabHost.addTab(tabHost.newTabSpec(FOLLOWING_SPEC).setIndicator("Following"), FollowingActivityFragment.class, null);
tabHost.addTab(tabHost.newTabSpec(YOU_SPEC).setIndicator("You"), YouActivityFragment.class, null);
tabHost.setCurrentTab(0);
return view;
}
@Override
public void onTabChanged(String s) {
}
}