1

我正在构建一个使用抽屉导航的 android 应用程序,它看起来和运行良好,除了我无法将当前视图(片段)添加到后堆栈以允许用户更轻松地导航应用程序。目前,后退按钮在按下时会退出应用程序。我在这里查看了各种问题,但没有一个有效。

这是我目前的尝试,不明白为什么它不起作用。

    if (id == R.id.nav_gallery) {
//            fragmentManager.beginTransaction().replace(R.id.content_frame, new  GalleryFragment()).commit();
//            fragmentManager.beginTransaction().addToBackStack(null);

        FragmentTransaction ft = fragmentManager.beginTransaction();
        ft.replace(R.id.content_frame, new GalleryFragment());
        ft.addToBackStack(null);
        ft.commit();
    }

编辑

onbackPressed

@Override
public void onBackPressed() {
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    FragmentManager fragmentManager = getFragmentManager();
    int backCount = fragmentManager.getBackStackEntryCount();

    if (drawer.isDrawerOpen(GravityCompat.START)) {
        drawer.closeDrawer(GravityCompat.START);
    } else {
        super.onBackPressed();
    }
}
4

3 回答 3

1

如果您想在按下 android 的后退按钮时控制您的交易,请使用以下代码

@Override
public void onBackPressed() {

// initialize variables
FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();

// check to see if stack is empty
if (fm.getBackStackEntryCount() > 0) {          
    fm.popBackStack();
    ft.commit();    
}
else {
    if (this.lastBackPressTime < System.currentTimeMillis() - 4000) {
Toast.makeText(this, "Nochmal drücken zum Beenden!", 4000).show();
this.lastBackPressTime = System.currentTimeMillis();
} else{
        super.onBackPressed();
    }        
}
}
于 2015-12-04T10:18:54.560 回答
1
instead of doing
super.onBackPressed();

使用以下条件将顶部状态从后台堆栈中弹出

    if(backCount >0){
        fragmentManager.popBackStack();
    }else{
        super.onBackPressed();
    }
于 2015-12-04T10:49:42.370 回答
0

你能试试这个吗?

FragmentTransaction ft = fragmentManager.beginTransaction();
ft.replace(R.id.content_frame, new GalleryFragment());
ft.addToBackStack("gallery_fragment");
ft.commit();

希望这会帮助你。

于 2015-12-04T10:13:55.723 回答