Android 带导航抽屉的viewpager

Android 带导航抽屉的viewpager,android,android-viewpager,navigation-drawer,Android,Android Viewpager,Navigation Drawer,我试图在导航抽屉中实现带有和不带viewpager的片段。以下是我努力实现的目标: 1个带导航抽屉的应用程序,有3个菜单:仪表板、费用、收入 2“dashboard”只是一个普通的片段,只有一个页面,或者我应该怎么称呼它,没有viewpager 3费用和收入是包含viewpager的另一个片段;费用每天有2个定期查看页面,而收入每天有3个定期查看页面 这是我的部分代码,我刚刚修改了Android Studio beta在选择NavigationDrawer项目时生成的代码: MyActivity

我试图在导航抽屉中实现带有和不带viewpager的片段。以下是我努力实现的目标:

1个带导航抽屉的应用程序,有3个菜单:仪表板、费用、收入

2“dashboard”只是一个普通的片段,只有一个页面,或者我应该怎么称呼它,没有viewpager

3费用和收入是包含viewpager的另一个片段;费用每天有2个定期查看页面,而收入每天有3个定期查看页面

这是我的部分代码,我刚刚修改了Android Studio beta在选择NavigationDrawer项目时生成的代码:

MyActivity.java
public class MyActivity extends ActionBarActivity
        implements NavigationDrawerFragment.NavigationDrawerCallbacks {

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my);

        mNavigationDrawerFragment = (NavigationDrawerFragment)
                getSupportFragmentManager().findFragmentById(R.id.navigation_drawer);
        mTitle = getTitle();

        // Set up the drawer.
        mNavigationDrawerFragment.setUp(
                R.id.navigation_drawer,
                (DrawerLayout) findViewById(R.id.drawer_layout));
    }

@Override
    public void onNavigationDrawerItemSelected(int position) {
        // update the main content by replacing fragments
        FragmentManager fragmentManager = getSupportFragmentManager();
        fragmentManager.beginTransaction()
                .replace(R.id.container, PlaceholderFragment.newInstance(position + 1))
                .commit();
    }
}

NavigationDrawerFragment.java
public class NavigationDrawerFragment extends Fragment {

private void selectItem(int position) {
        Fragment fragment = null;
        mCurrentSelectedPosition = position;

        if (mDrawerListView != null) {
            mDrawerListView.setItemChecked(position, true);
        }
        if (mDrawerLayout != null) {
            mDrawerLayout.closeDrawer(mFragmentContainerView);
        }
        if (mCallbacks != null) {
            mCallbacks.onNavigationDrawerItemSelected(position);
        }

        switch (position) {
            case 0:
                fragment = new Dashboard();
                break;
            case 1:
                fragment = new Expenses();
                break;
            case 2:
                fragment = new Income();
                break;

            default:
                break;
        }

        if (fragment != null) {
            FragmentManager fragmentManager = getFragmentManager();
            fragmentManager.beginTransaction().replace(R.id.container, fragment).commit();

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

Expenses.java
public class Expenses extends Fragment{

private class MyPageAdapter extends FragmentPagerAdapter{
        private final String[] TITLES = { "Daily", "Recurring"};
        public MyPageAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public CharSequence getPageTitle(int position) {
            return TITLES[position];
        }

        @Override
        public int getCount() {
            return TITLES.length;
        }

        @Override
        public Fragment getItem(int position) {
            switch (position) {
                case 0:
                    return ExpensesDaily();
                case 1:
                   return ExpensesRecurring;

            }
        }
    }
}
但我仍然不知道如何实现expenses.java,当我们从NavigationDrawer中选择“expenses”菜单时,会调用它。java应该实现ViewPager,它应该有2个页面,这是每日和定期的。非常感谢您的帮助。谢谢

更新1:

我试图使Expenses.java扩展FragmentActivity,但我们似乎无法使用以下代码从NavigationDrawer调用另一个活动:

switch (position) {
                case 0:
                    fragment = new Dashboard();
                    break;
                case 1:
                    fragment = new Expenses();
                    break;
                case 2:
                    fragment = new Income();
                    break;

                default:
                    break;
            }

即使可以完成,那也不是我想要的,因为打开另一个活动就像打开一个新窗口,对吗?

我也在处理相同的需求这里是我的演示代码,希望它能在开发阶段帮助您

经过这么多的研究,我终于解决了这个问题,并实现了我想要的目标


您遇到的问题是,您希望一些顶级片段,即ExpensesFragment和IncomeFragment,在ViewPager的页面中使用更多片段,因为您已经定义了FragmentPagerAdapter实现

当你实例化FragmentPagerAdapter时,你给它一个FragmentManager。我相信您需要在顶级片段中使用getChildFragmentManager,例如:

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    MyPageAdapter adapter = new MyPageAdapter(getChildFragmentManager());
    viewPager.setAdapter(adapter);
}

这将提供特定于此特定片段的FragmentManager实例,并用于管理嵌套片段。

这将对您有所帮助。我也有同样的问题。这对我有用