Действительно, это касается нескольких вопросов относительно использования FragmentTabHost. Я нашел рабочий sample, который использует FragmentTabHost в действии. Мне нужно использовать его в фрагменте.фрагмент в FragmentTabHost не отображается
Он отображает фрагмент с вкладками, но фрагмент содержимого для вкладки не отображается. Я видел Log, что onCreateView() для этого фрагмента содержимого действительно вызван, но просто не отображается на экране.
Я видел, как кто-то использовал дополнительный FrameLayout, я не уверен, почему. Но пробовал в обоих направлениях, не помогает. и в doc, он создает FragmentTabHost, вместо этого выходит из макета. Итак, каков правильный способ использования FragmentTabHost?
mTabHost = new FragmentTabHost(getActivity()); mTabHost.setup(getActivity(), getChildFragmentManager(), R.id.fragment1);
Я попытался таким же образом определить расположение вкладки фрагмента (tab_fragment_layout.xml), как в образце:
<android.support.v4.app.FragmentTabHost xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/tabhost" android:layout_width="match_parent" android:layout_height="match_parent" > <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TabWidget android:id="@android:id/tabs" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="bottom"/> <!-- why need it? --> <!-- with or without this @android:id/tabcontent FramLayout dosent work--> <!--FrameLayout android:id="@android:id/tabcontent" android:layout_width="0dp" android:layout_height="0dp" android:layout_weight="0" /--> <!-- --> <FrameLayout android:id="@+id/tabFrameLayout" android:layout_width="fill_parent" android:layout_height="0dp" android:layout_weight="1" /> </LinearLayout>
TabFragment :: onCreateView() является :
TabFragment extends Fragment...
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.tab_fragment_layout, container, false);
mTabHost = (FragmentTabHost) view.findViewById(R.id.tabhost);
mTabHost.setup(getActivity(), getChildFragmentManager(),
R.id.tabFrameLayout);
mTabHost.addTab(mTabHost.newTabSpec("simple").setIndicator("Simple"),
ContentFragment.class, null);
mTabHost.addTab(mTabHost.newTabSpec("contacts").setIndicator("Contacts"),
ContentFragment.class, null);
return view;
}
фрагмент содержимого прост:
public class ContentFragment extends Fragment {
private String title = "no page data";
private int page = -1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle args = getArguments();
if (args != null) {
page = getArguments().getInt("someInt", 0);
title = getArguments().getString("someTitle");
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_layout, container, false);
TextView tv = (TextView) v.findViewById(R.id.text);
tv.setText(this.getTag() + " Content"+", page data:"+title+" "+page);
return v;
}
}
Опять же, это только портирование sample (с использованием его активности), чтобы использовать его в фрагменте. Но после добавления этого фрагмента в действие он отображает только вкладку без фрагмента контента для каждой вкладки.
FragmentManager fm = getSupportFragmentManager();
TabFragment tabFrgmt = new TabFragment();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.tab_fragment_holder, tabFrgmt);
ft.addToBackStack("theTabFragment");
ft.show(tabFrgmt);
ft.commit();
Спасибо Зак. Но все же хотите использовать фрагмент FragmentTabHost. – lannyf