Android返回导航器中的第一个片段

Dun*_*key 3 android android-fragments navigation-drawer

我有一个在NavigationDrawer中有多个片段的应用程序.

以下是我的代码:

@Override
    public boolean onPrepareOptionsMenu(Menu menu) {
        // if nav drawer is opened, hide the action items
        boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);
        menu.findItem(R.id.action_search).setVisible(!drawerOpen);
        return super.onPrepareOptionsMenu(menu);
    }

    /**
     * Diplaying fragment view for selected nav drawer list item
     * */
    private void displayView(int position) {
        // update the main content by replacing fragments
        fragment = null;

        switch (position) {
        case 0:
            fragment = new HomeFragment();
            break;
        case 1:
            fragment = new GalleryFragment();
            break;
        case 2:
            fragment = new ContactFragment();
            break;
        default:
            break;
        }

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

            // update selected item and title, then close the drawer
            mDrawerList.setItemChecked(position, true);
            mDrawerList.setSelection(position);
            setTitle(navMenuTitles[position]);
            mDrawerLayout.closeDrawer(mDrawerList);
        } else {
            // error in creating fragment
            Log.e("MainActivity", "Error in creating fragment");
        }
    }

    @Override
    public void setTitle(CharSequence title) {
        mTitle = title;
        getActionBar().setTitle(mTitle);
    }

    /**
     * When using the ActionBarDrawerToggle, you must call it during
     * onPostCreate() and onConfigurationChanged()...
     */

    @Override
    protected void onPostCreate(Bundle savedInstanceState) {
        super.onPostCreate(savedInstanceState);
        // Sync the toggle state after onRestoreInstanceState has occurred.
        mDrawerToggle.syncState();
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        // Pass any configuration change to the drawer toggls
        mDrawerToggle.onConfigurationChanged(newConfig);

    }


    @Override
    public void onBackPressed() {

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

            int position = 0;
            fragment = new HomeFragment();

            // update selected item and title, then close the drawer
            mDrawerList.setItemChecked(position, true);
            mDrawerList.setSelection(position);
            setTitle(navMenuTitles[position]);
            mDrawerLayout.closeDrawer(mDrawerList);
        } else {
            // error in creating fragment
            Log.e("MainActivity", "Error in creating fragment");
        } 



    } 
Run Code Online (Sandbox Code Playgroud)

它基本上是什么,它首先进入HomeFragment,当我想去其他fragmentMediaFragment并决定回去按后退按钮,我想去HomeFragment,当我想关闭应用程序再次按下后退按钮它现在将像gmail应用程序一样关闭应用程序.我怎样才能做到这一点?我使用我放入的代码时遇到了问题onBackPressed().每当我转到其他片段时,HomeFragment就会显示出来.有任何想法吗?对你的帮助表示感谢.

更新:在我进入MediaFragment并按下后退按钮之前,它会自动关闭应用程序.它不应该是,但它应该去HomeFragment,当它在HomeFragment,我点击后退按钮然后它将关闭应用程序.

Kar*_*uri 8

为什么不跟踪选择的最后位置,而不是在onBackPressed中复制代码?

int selectedPosition = 0;

private void displayView(int position) {
    ... // All your current code
    selectedPosition = position;
}

@Override
public void onBackPressed() {
    if (selectedPosition != 0) {
        displayView(0);
    } else {
        super.onBackPressed();
}
Run Code Online (Sandbox Code Playgroud)