Страница 1 из 1

FragmentTabHost внутри фрагмента

Добавлено: 09 апр 2015, 17:20
Helena2977
Есть несколько фрагментов, которые расположены внутри ViewPager. Один из них тоже состоит из фрагментов, которые я пытаюсь положить во FragmentTabHost. Не получается никак. Получаю ошибку Recursive entry to executePendingTransactions при попытке перейти на этот фрагмент во ViewPager. Что происходит? Запуталась совсем. Может это вообще неправильно, тут использовать FragmentTabHost? Тогда как по-другому сделать?
Суть в том, чтобы внутри фрагмента были вкладки с другими фрагментами.
Вот код фрагмента с FragmentTabHost:

Код: Выделить всё

public class FragmentDiary extends Fragment {
    private static String TAB_TABLE = "Table";
    private static String TAB_GRAPH = "Graph";
    private FragmentActivity activity;
    LinearLayout fragmentLayout;
    private LayoutInflater inflater;

    private FragmentTabHost tabHost;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        this.inflater = inflater;
        fragmentLayout = (LinearLayout)inflater.inflate(R.layout.diary_fragment, null);
        setupTabHost();
        addTabs();
        tabHost.setCurrentTabByTag(TAB_TABLE);
        return fragmentLayout;
    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        this.activity = (FragmentActivity)activity;
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
    }

    private void setupTabHost() {
        tabHost = (FragmentTabHost) fragmentLayout.findViewById(android.R.id.tabhost);
        tabHost.setup(activity, activity.getSupportFragmentManager(), android.R.id.tabcontent);
    }

    private void addTabs() {
        tabHost.addTab(setupTab(TAB_TABLE, R.drawable.ic_launcher), FragmentTable.class, null);
        tabHost.addTab(setupTab(TAB_GRAPH, R.drawable.ic_launcher), FragmentGraph.class, null);
    }

    private TabHost.TabSpec setupTab(final String tag, int imageRes) {
        return tabHost.newTabSpec(tag).setIndicator(createTabView(tabHost.getContext(), imageRes));
    }

    private View createTabView(final Context context, int imageRes) {
        View view = inflater.inflate(R.layout.upper_tab_bg, null);
        View v = view.findViewById(R.id.tabsIndicator);
        v.setBackground(getResources().getDrawable(imageRes));
        return view;
    }

}


Re: FragmentTabHost внутри фрагмента

Добавлено: 10 апр 2015, 08:09
klblk
В документации вместо activity.getSupportFragmentManager() используется getChildFragmentManager(). Может это поможет.

Ну и что-то мне подсказывает что подружить это с ViewPager не удастся.

Re: FragmentTabHost внутри фрагмента

Добавлено: 10 апр 2015, 10:21
Helena2977
Метода getChildFragmentManager() не знает. Может это для старших версий только?
А если по другому, то как лучше? Просто кнопки сделать и динамически фрагменты создавать?

Re: FragmentTabHost внутри фрагмента

Добавлено: 10 апр 2015, 10:35
Mikhail_dev
Я вроде делал такое. Не могу только вспомнить что есть TabHosty. Это табы от ActionBar?
У вас стоят вызовы метода setRetainInstance у фрагментов?

Re: FragmentTabHost внутри фрагмента

Добавлено: 10 апр 2015, 12:28
Helena2977
Вроде получилось с getChildFragmentManager(). Только теперь странно получилось: почему-то фрагменты рисуются. Но там вверху сразу идет TextView. И он почему-то не прорисовывается. Такое впечатление, что он оказывается под самими вкладками. Наверно я в xml напортачила чего-то:

Код: Выделить всё

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    
    <android.support.v4.app.FragmentTabHost
        android:id="@android:id/tabhost"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentBottom="true"
        android:background="@color/black">
        <FrameLayout
                android:id="@android:id/tabcontent"
                android:layout_width="match_parent"
                android:layout_height="30dp"
                 />
        <FrameLayout
            android:id="@+id/realtabcontent"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
             />
    </android.support.v4.app.FragmentTabHost>
</LinearLayout>

Re: FragmentTabHost внутри фрагмента

Добавлено: 10 апр 2015, 12:41
Helena2977
Уже решила проблему: просто положила оба FrameLayout в Relativlayout и установила один под другим. Спасибо за помощь.