TabSpec SetContent to Fragment

ぐ巨炮叔叔 提交于 2019-12-07 22:32:58

问题


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

    }
}

回答1:


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

    }
}


来源:https://stackoverflow.com/questions/22294444/tabspec-setcontent-to-fragment

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!