导航抽屉中的FragmentTabHost

时间:2015-06-14 16:38:15

标签: android android-fragments android-tabhost fragment-tab-host android-nested-fragment

我正在尝试使用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,因此如果存在,我可以采用更好的方式执行此操作。

1 个答案:

答案 0 :(得分:0)

随着Android Studio附带的这个示例应用程序似乎已经老化了。我建议您使用DrawerLayout。您可以从Google here找到官方样本。

如果您想要使用最新API的完整示例,请查看此github sample

对于您的情况,类DrawerActivityTabHolderFragmentTabFragment将是非常类型的。