我正在构建一个使用抽屉导航的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();
}
}
答案 0 :(得分: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();
}
}
}
答案 1 :(得分:1)
instead of doing
super.onBackPressed();
使用以下条件将后顶部状态从顶部状态弹出
if(backCount >0){
fragmentManager.popBackStack();
}else{
super.onBackPressed();
}
答案 2 :(得分:0)
你能试试这个吗?
FragmentTransaction ft = fragmentManager.beginTransaction();
ft.replace(R.id.content_frame, new GalleryFragment());
ft.addToBackStack("gallery_fragment");
ft.commit();
希望这会对你有所帮助。