【发布时间】:2015-06-14 16:38:14
【问题描述】:
我正在尝试使用 Android Studio 中的示例 Navigation Drawer 应用创建带有 Navigation Drawer 的应用。我试图从导航抽屉创建的第一个片段有 3 个选项卡,我正在尝试使用 FragmentTabHost 在选项卡之间切换并在每个选项卡下方加载一个略有不同的片段。我希望用户导航的主要部分导航抽屉中的应用程序以及在某些屏幕上我想使用 TabHost 进行子级导航。我基本上想使用这里的 Android 开发者网站上推荐的两级导航之类的东西: https://www.google.com/design/spec/patterns/navigation.html#navigation-two-levels
我在这里找到了一些如何使用 FragmentTabHost 的示例:http://developer.android.com/reference/android/support/v4/app/FragmentTabHost.html
第一个示例不起作用,因为 FragmentTabHost 正在扩展 FragmentActivity,但 Navigation Drawer 代码似乎只调用 Fragments
尝试使用嵌套片段实现第二个示例给我一个错误,如下错误:
错误:(106, 17) 错误: 没有找到合适的安装方法(FragmentActivity,FragmentManager,int) 方法 TabHost.setup(LocalActivityManager) 不适用 (实际参数列表和形式参数列表的长度不同) 方法 TabHost.setup() 不适用 (实际参数列表和形式参数列表的长度不同)
在:
mTabHost.setup(getActivity(), getChildFragmentManager(),
R.layout.fragment_tab_host);
这是我的 MainActivity.java 中的一个 sn-p:
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");
}
}
}
这里是 fragment_tabhost.java 的代码的 sn-p,当您单击导航抽屉中的第一项时会调用该代码:
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;
}
}
我只针对 API 级别 15 的最低 SDK,因此如果存在更好的方法,我愿意接受。
【问题讨论】:
-
我一直在考虑使用操作栏选项卡,但我在某处看到它们已被弃用。
标签: android android-fragments android-tabhost fragment-tab-host android-nested-fragment