FragmentTabHost没有在android中的Fragment中创建视图

sha*_*ess 19 android android-tabhost android-fragments fragment-tab-host android-nested-fragment

我在使用tabhost更改视图时遇到问题 - 当我选择一个选项卡时,内容保持空白.

据我所知,onCreateView没有被称为儿童碎片.onMenuCreate运行正常,因为菜单改变了它应该.

   public class PatientTabFragment extends Fragment {
    private FragmentTabHost mTabHost;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        mTabHost = new FragmentTabHost(getActivity());
        mTabHost.setup(getActivity(), getChildFragmentManager());

        mTabHost.addTab(mTabHost.newTabSpec("simple").setIndicator("Info"),
                NewPatientFragment.class, null);
        mTabHost.addTab(mTabHost.newTabSpec("contacts").setIndicator("Notes"),
                NoteListFragment.class, null);


        return mTabHost;
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        mTabHost = null;
    }
}
Run Code Online (Sandbox Code Playgroud)

Raf*_*l T 5

根据文件:

特殊的TabHost,允许使用Fragment对象作为其选项卡内容.将此放置在视图层次结构中时,在对层次结构进行充气后,必须调用setup(Context,FragmentManager,int)以完成选项卡主机的初始化.

(强调我的)

所以我建议像这样:

   public class PatientTabFragment extends Fragment {
    private FragmentTabHost mTabHost;
    private boolean createdTab = false;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        mTabHost = new FragmentTabHost(getActivity());
        mTabHost.setup(getActivity(), getChildFragmentManager());

        mTabHost.addTab(mTabHost.newTabSpec("simple").setIndicator("Info"),
                NewPatientFragment.class, null);
        mTabHost.addTab(mTabHost.newTabSpec("contacts").setIndicator("Notes"),
                NoteListFragment.class, null);


        return mTabHost;
    }

    public void onResume(){
        if (!createdTab){
          createdTab = true;
          mTabHost.setup(getActivity(), getActivity().
                         getSupportedFragmentManager());
        }
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        mTabHost = null;
    }
}
Run Code Online (Sandbox Code Playgroud)