Android 在NavigationDrawer中切换整个片段

Android 在NavigationDrawer中切换整个片段,android,android-fragments,Android,Android Fragments,我正在浏览developer.android.com上的NavigationDrawer示例代码,并试图将其实现为我的一个应用程序的导航。然而,在主窗口中切换片段时,我遇到了一个问题,因为示例代码重用了相同的片段,只是切换出了一个imageview。以下是示例中的代码: private class DrawerItemClickListener implements ListView.OnItemClickListener { @Override public void onIt

我正在浏览developer.android.com上的NavigationDrawer示例代码,并试图将其实现为我的一个应用程序的导航。然而,在主窗口中切换片段时,我遇到了一个问题,因为示例代码重用了相同的片段,只是切换出了一个imageview。以下是示例中的代码:

private class DrawerItemClickListener implements ListView.OnItemClickListener {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        selectItem(position);
    }
}

private void selectItem(int position) {
    // update the main content by replacing fragments
    Fragment fragment = new PlanetFragment();
    Bundle args = new Bundle();
    args.putInt(PlanetFragment.ARG_PLANET_NUMBER, position);
    fragment.setArguments(args);

    FragmentManager fragmentManager = getFragmentManager();
    fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit();

    // update selected item and title, then close the drawer
    mDrawerList.setItemChecked(position, true);
    setTitle(mPlanetTitles[position]);
    mDrawerLayout.closeDrawer(mDrawerList);
}
并在我的碎片中添加了与PlanetFragment相同的空构造函数:

public Fragmentstatus() {
    // Empty constructor required for fragment subclasses
}
它不起作用,每当我打开应用程序时,它只会在actionbar中显示应用程序图标和标题,没有内容,actionbar上没有操作,没有导航抽屉,什么都没有,然后它在大约一秒钟后崩溃。对于原始代码,它可以工作并显示所有内容,但这只适用于一个片段


如何在NavigationDrawer中切换片段?

看看我的代码:

private class DrawerItemClickListener implements ListView.OnItemClickListener {

        @Override
        public void onItemClick(AdapterView parent, View view, int position, long id) {
            selectItem(position);
        }
    }

private void selectItem(int position) {

        switch (position) {

            case 0:

                fragmentManager.beginTransaction()
                        .replace(R.id.content_frame, new MainActivityFragment())
                        .commit();
                break;

            case 1:

                fragmentManager.beginTransaction()
                        .replace(R.id.content_frame, new DbListViewFragment())
                        .commit();
                break;

            case 2:

                fragmentManager.beginTransaction()
                        .replace(R.id.content_frame, new StatisticsFragment())
                        .commit();
                break;

            case 3:

                fragmentManager.beginTransaction()
                        .replace(R.id.content_frame, new CalculatorFragment(), "calculator")
                        .commit();
                break;

        }
我用的是开关箱。位置0是抽屉中我的ListView中的第一项

从我对这个问题的回答中可以看出:

编辑:

如果您想在开始时选择一个片段,可以在onCreate方法的末尾这样做:

if (savedInstanceState == null) {
            selectItem(0);
        }

0是所需片段的位置

请查看我的代码:

private class DrawerItemClickListener implements ListView.OnItemClickListener {

        @Override
        public void onItemClick(AdapterView parent, View view, int position, long id) {
            selectItem(position);
        }
    }

private void selectItem(int position) {

        switch (position) {

            case 0:

                fragmentManager.beginTransaction()
                        .replace(R.id.content_frame, new MainActivityFragment())
                        .commit();
                break;

            case 1:

                fragmentManager.beginTransaction()
                        .replace(R.id.content_frame, new DbListViewFragment())
                        .commit();
                break;

            case 2:

                fragmentManager.beginTransaction()
                        .replace(R.id.content_frame, new StatisticsFragment())
                        .commit();
                break;

            case 3:

                fragmentManager.beginTransaction()
                        .replace(R.id.content_frame, new CalculatorFragment(), "calculator")
                        .commit();
                break;

        }
我用的是开关箱。位置0是抽屉中我的ListView中的第一项

从我对这个问题的回答中可以看出:

编辑:

如果您想在开始时选择一个片段,可以在onCreate方法的末尾这样做:

if (savedInstanceState == null) {
            selectItem(0);
        }

0是所需片段的位置

从日志猫中发布崩溃的堆栈跟踪。谢谢,已经修复,mike.b93的答案和修复一个不相关的错误成功了。从日志猫发布崩溃的堆栈跟踪。谢谢,已经修复,mike.b93的答案和修复一个不相关的错误成功了。谢谢,这和在我的脚本中修复一个完全不相关的bug对我起到了作用。我愿意投票,但由于我作为新用户的身份,我无法投票,尽管我接受了答案。@MarcelUlbrich很乐意提供帮助,只要你被允许,请随时投票:DThanks,这和修复我脚本中一个完全无关的错误帮了我的忙。我愿意投票,但由于我作为新用户的身份,我无法投票,尽管我接受了答案。@MarcelUlbrich很乐意帮忙,只要你被允许,请随时投票:D