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

Ответить
Helena2977
Сообщения: 18
Зарегистрирован: 10 мар 2015, 17:56

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

Сообщение Helena2977 » 09 апр 2015, 17:20

Есть несколько фрагментов, которые расположены внутри 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;
    }

}


Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

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

Сообщение klblk » 10 апр 2015, 08:09

В документации вместо activity.getSupportFragmentManager() используется getChildFragmentManager(). Может это поможет.

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

Helena2977
Сообщения: 18
Зарегистрирован: 10 мар 2015, 17:56

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

Сообщение Helena2977 » 10 апр 2015, 10:21

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

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

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

Сообщение Mikhail_dev » 10 апр 2015, 10:35

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

Helena2977
Сообщения: 18
Зарегистрирован: 10 мар 2015, 17:56

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

Сообщение Helena2977 » 10 апр 2015, 12:28

Вроде получилось с 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>

Helena2977
Сообщения: 18
Зарегистрирован: 10 мар 2015, 17:56

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

Сообщение Helena2977 » 10 апр 2015, 12:41

Уже решила проблему: просто положила оба FrameLayout в Relativlayout и установила один под другим. Спасибо за помощь.

Ответить