FragmentTabHost из окна навигации

Я пытаюсь создать приложение с помощью Навигатора, используя пример приложения Навигации в Android Studio. Мой первый фрагмент, который я пытаюсь создать из панели навигации, имеет 3 вкладки, и я пытаюсь использовать FragmentTabHost для переключения между вкладками и загрузки немного разных фрагментов под каждой вкладкой. Я хочу, чтобы пользователь перемещался по основным разделам приложение из окна навигации и на некоторых экранах я хочу иметь подуровень навигации с помощью TabHost. Я в основном хочу использовать что-то вроде двухуровневой навигации, которая рекомендуется на сайте разработчиков Android здесь: https://www.google.com/design/spec/patterns/navigation.html

Я нашел несколько примеров использования FragmentTabHost здесь: http://developer.android.com/reference/android/support/v4/app/FragmentTabHost.html

Первый пример не работает, потому что FragmentTabHost расширяет FragmentActivity, но кажется, что код навигационного ящика вызывает только фрагменты

Попытка реализовать второй пример с использованием вложенных фрагментов выдает мне следующую ошибку:

Ошибка:(106, 17) ошибка: не найден подходящий метод для установки (FragmentActivity,FragmentManager,int) метод TabHost.setup(LocalActivityManager) не применим (фактические и формальные списки аргументов различаются по длине) метод TabHost.setup() не является применимо (фактические и формальные списки аргументов различаются по длине)

в:

mTabHost.setup(getActivity(), getChildFragmentManager(), 
            R.layout.fragment_tab_host);

Вот фрагмент из моего MainActivity.java:

public class MainActivity extends ActionBarActivity
    implements NavigationDrawerFragment.NavigationDrawerCallbacks{

    private NavigationDrawerFragment mNavigationDrawerFragment;

    @Override
    public void onNavigationDrawerItemSelected(int position) {
        // update the main content by replacing fragments
        Fragment fragment = null;
        switch (position) {
            case 0:
                fragment = new fragment_tabHost();
                break;
            default:
                break;
        }

        if (fragment != null) {
            FragmentManager fragmentManager = getSupportFragmentManager();
            fragmentManager.beginTransaction()
                .replace(R.id.container, fragment).commit();
            // update selected item and title, then close the drawer

        } else {
            Log.e("MainActivity", "Error in creating fragment");
        }
    }
}

Вот фрагмент кода для фрагмента_таблица.java, который вызывается при нажатии первого элемента в навигационной панели:

import android.app.Activity;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTabHost;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TabHost;

public class fragment_tabHost extends Fragment {

    private TabHost mTabHost;    
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        mTabHost = new FragmentTabHost(getActivity());
        mTabHost.setup(getActivity(), getChildFragmentManager(),  
            R.layout.fragment_tab_host);

        mTabHost.addTab(mTabHost.newTabSpec("tab1").setIndicator("Tab1"),
            tab1.class, null);
        mTabHost.addTab(mTabHost.newTabSpec("tab2").setIndicator("Tab2"),
            tab2.class, null);
        mTabHost.addTab(mTabHost.newTabSpec("tab3").setIndicator("Tab3"),
            tab3.class, null);

        return mTabHost;

    }
}

Я нацеливаюсь только на минимальный SDK уровня API 15, поэтому я открыт для лучшего способа сделать это, если таковой существует.

1 ответ

Это пример приложения, которое поставляется с Android Studio, кажется, в возрасте. Я бы порекомендовал вам использовать DrawerLayout. Вы найдете официальный образец от Google здесь.

Если вы хотите полный пример с новейшим API, взгляните на этот пример github.

Для вашего случая будут интересны классы DrawerActivity, TabHolderFragment и TabFragment.