Android 片段和后台堆栈
Android fragments and the backstack
我正在构建一个使用抽屉式导航的 android 应用程序,它看起来和运行良好,除了我无法将当前视图(片段)添加到后台堆栈以允许用户更轻松地导航应用程序.目前,后退按钮仅在按下时退出应用程序。我在这里查看了各种问题并且 none 有效。
这是我目前的尝试,不明白为什么它不起作用。
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();
}
}
你能试试这个吗?
FragmentTransaction ft = fragmentManager.beginTransaction();
ft.replace(R.id.content_frame, new GalleryFragment());
ft.addToBackStack("gallery_fragment");
ft.commit();
希望对您有所帮助。
如果您想在按下 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();
}
}
}
instead of doing
super.onBackPressed();
使用以下条件从返回堆栈弹出顶部状态
if(backCount >0){
fragmentManager.popBackStack();
}else{
super.onBackPressed();
}
我正在构建一个使用抽屉式导航的 android 应用程序,它看起来和运行良好,除了我无法将当前视图(片段)添加到后台堆栈以允许用户更轻松地导航应用程序.目前,后退按钮仅在按下时退出应用程序。我在这里查看了各种问题并且 none 有效。
这是我目前的尝试,不明白为什么它不起作用。
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();
}
}
你能试试这个吗?
FragmentTransaction ft = fragmentManager.beginTransaction();
ft.replace(R.id.content_frame, new GalleryFragment());
ft.addToBackStack("gallery_fragment");
ft.commit();
希望对您有所帮助。
如果您想在按下 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();
}
}
}
instead of doing
super.onBackPressed();
使用以下条件从返回堆栈弹出顶部状态
if(backCount >0){
fragmentManager.popBackStack();
}else{
super.onBackPressed();
}