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.