我正在尝试使用Android Studio中的示例导航抽屉应用程序使用导航抽屉创建应用程序。我试图从导航抽屉创建的第一个片段有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但导航抽屉代码似乎只调用片段
尝试使用嵌套片段实现第二个示例时出现以下错误:
错误:(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");
}
}
}
这里是fragment_tabhost.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;
}
}
我只定位API级别为15的最低SDK,因此如果存在,我可以采用更好的方式执行此操作。
答案 0 :(得分:0)
随着Android Studio附带的这个示例应用程序似乎已经老化了。我建议您使用DrawerLayout。您可以从Google here找到官方样本。
如果您想要使用最新API的完整示例,请查看此github sample。
对于您的情况,类DrawerActivity,TabHolderFragment和TabFragment将是非常类型的。