Articles of back stack

addToBackStack不起作用,关闭活动而不是popup片段

我有一个问题,我无法在任何地方find解决方案。 当我按下后退按钮时,我的应用程序不会返回到上一个片段,而是关闭活动。 我有一个显示4个片段的活动:[1],[2],[3],[4]。 我可以使用操作栏在前3个片段之间切换,我不想将它们添加到后台堆栈。 片段[4]是片段[3]中选择的项目的详细视图。 当我按回[4]时,我想返回片段[3],而不是关闭应用程序。 过渡是以这种方式完成的,其中放置了片段的活动: private void replaceFragment(Fragment fragment, boolean toBackStack){ if(fragment != null){ FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); fragmentTransaction.replace(R.id.container, fragment); if(toBackStack) fragmentTransaction.addToBackStack(null); fragmentTransaction.commit(); } } 除非转换是从[3]到[4],否则toBackStack始终为false。 如果我在每次转换中都将toBackStack传递给true,那么活动无论如何都会关闭。

Android Fragment Back Stack

我在我的项目中使用了多个片段。 我想保存Fragment的状态,并在我回到此状态时恢复此状态。 在这个片段中,我显示了多个图像,这些图像在按钮点击时发生 我使用以下代码: String backStateName = fragment.getClass().getName(); FragmentManager fragmentManager = getSupportFragmentManager(); boolean fragmentPopped = fragmentManager.popBackStackImmediate(backStateName, 0); if (!fragmentPopped) { FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.replace(R.id.container_body, fragment); fragmentTransaction.addToBackStack(backStateName); fragmentTransaction.commit(); } 它工作正常并保存状态,但它不显示以前的图像。 任何帮助,建议或教程将受到高度赞赏。 谢谢。

清除较旧SDK上的完整Android活动堆栈(缺少FLAG_ACTIVITY_CLEAR_TASK)

我已经在SO上做了一些阅读和搜索,但找不到清除当前活动堆栈的方法 。 我的应用程序的上下文是由后台服务/通知启动的活动。 想象一下,我的应用程序允许您组织一个人员列表。 几个小时前,您正在“查看”活动中查看人员X ,现在这是您的堆栈顶部。 在将来的某个时刻,服务会触发并为人Ypopup一个新的“通知”活动。 从那里你可以编辑人Y的详细信息。 当你完成这个活动时,popup堆栈并最终查看人X将是一个令人困惑的用户体验。理想情况下我想回到用户正在做的任何事情(电子邮件等…),或者至少我的应用程序的主页。 我尝试使用FLAG_ACTIVTY_NEW_TASK启动“Notify”但这似乎没有帮助: 当任务完成时,它只是返回上一个任务 。 我想要的似乎是Android 3的新FLAG_ACTIVITY_CLEAR_TASK ,它在以前的SDK中不存在。 有没有人有建议实现这一目标?

如何查找活动是否是堆栈中的最后一个活动

我在我的应用程序中打开一个链接,一旦按下后我想显示HomePage以保留用户更多时间。 我一直试图实现这一目标但却无法做到这一点。 我将homeLauncher活动作为我的top和baseActivity。 DeepLink Tap>打开所需的活动>用户按下后退按钮>检查其上一个活动但不是homeActivity>如果是,请将用户导航到homeActivity。 尝试以下代码: @Override public void onBackPressed() { ActivityManager mngr = (ActivityManager) getSystemService( ACTIVITY_SERVICE ); List taskList = mngr.getRunningTasks(10); if(taskList.get(0).numActivities == 1 && taskList.get(0).topActivity.getClassName().equals(this.getClass().getName())){ //// This is last activity } else{ //// There are more activities in stack } super.onBackPressed(); } 我也试过isTaskRoot但结果是一样的。 它没有给出正确的答案。请帮助

如何从FragmentManager中删除以前的堆栈条目?

我有一个活动,我使用以下方法切换片段: public void setCurrentFragment(Fragment fragment) { FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); transaction.setCustomAnimations(R.anim.slide_left_right_in, R.anim.slide_left_right_out, R.anim.slide_right_left_in, R.anim.slide_right_left_out); transaction.replace(R.id.contentFrameLayout, fragment, Integer.toString(fragmentId++)); transaction.addToBackStack(Integer.toString(fragmentId)); transaction.commit(); } 我的导航堆栈如下所示: N-2 – > N-1 – > N. 当某个片段N’打开’时,我想要从后台取出前一个(N-1),所以当我按’后’时我想要恢复N-2片段。 当我在N片段中调用FragmentManager.popBackStack(..)时,它会删除N和N-1片段。 在切换到N片段之前,我试图在N-1片段中调用popBackStack(..)。 但是在那种情况下,N-2片段被恢复,并且仅在显示N片段之后。 我的问题是:有没有办法从backstack中删除以前的片段而不popup当前片段?

获取后栈中的最后一个片段

我看过这篇文章,但这里发布的解决方案对我不起作用: 在backstack中获取最新的片段 当我替换另一个片段时,我使用: FragmentManager manager = getSupportFragmentManager(); FragmentTransaction ft = manager.beginTransaction(); ft.replace(android.R.id.tabcontent, fragment, tag); ft.addToBackStack(null); ft.commit(); 所以,请注意我正在使用标签来检测任何片段。 我的问题尤其如下: 假设我有fragment_A,fragment_B和fragment_C。 我可以从fragment_A或fragment_B获取fragment_C,并且根据调用的父级,我必须做一些特别的事情。 所以,我再次需要恢复后堆栈中的最后一个FRAGMENT。 当我尝试做: FragmentManager fm = getSupportFragmentManager(); for(int entry = 0; entry < fm.getBackStackEntryCount(); entry++){ String ide = fm.getBackStackEntryAt(entry).getName(); Log.i("TAG", "Found fragment: " + ide); } 我得到零。 如果我使用getId()代替,我得到数字,所以我尝试做: int id = fm.getBackStackEntryAt(entry).getId(); Fragment fragment = fm.findFragmentById(id); […]

Fragment PopBackStack

我遇到一个奇怪的问题,同时使用Fragments并popup它们。 我有一个片段活动: Step1:我在起始命名片段A中的那个Activity的onCreate中附加了一个片段: 这是onCreate of Fragment Activity @Override protected void onCreate(Bundle savedBundleState) { super.onCreate(savedBundleState); setContentView(R.layout.activity_base_new); Fragement_Home home = new Fragement_Home(); FragmentManager manager = getSupportFragmentManager(); manager.beginTransaction().add(R.id.frameContent, home).addToBackStack(“home”).commit(); } 步骤:2之后我附加了使用以下代码替换Fragment: Fragment_More moreFragment = new Fragment_More(); FragmentManager manager = getSupportFragmentManager(); manager.beginTransaction().replace(R.id.frameContent, moreFragment).addToBackStack(“more”).commit(); 第3步:之后,我再次以相同的方式在Fragment_More上添加了一个片段: Fragment_AboutRockstand termsConditions = new Fragment_AboutRockstand(); getActivity().getSupportFragmentManager().beginTransaction().replace(R.id.frameContent, termsConditions).addToBackStack(“about_rockstand”).commit(); 这是我的片段活动onBackPressedButton Lisetener: @Override public void onBackPressed() { FragmentManager […]

从backstackpopup时不会调用片段的onResume()

嗨,我正在开发我正在使用的Android应用程序我正在使用单个Activity和3个片段。 所以考虑我有3个片段AB C.当我从A切换到B时,我将Fragment添加到backstack并且将B和C添加到C.现在当我从C点击它时它向我显示B和类似的B到A. 但事实是,当我从C到B或B到A时,它不会调用onResume()或Fragment任何其他生命周期方法。 我想为每个Fragment做什么我在ActionBar有不同的标题。 所以,在我的代码中,当我从A移动到B或B到c时,我正在更改片段内的活动标题。 但是,当我点击它时它不会改变。 实际问题是什么? 为什么在从backstackpopup后它没有为我的Fragment调用onResume() ? 我该如何解决这个问题? 需要帮忙。 谢谢。

Android Reorder Fragment Backstack

我的导航抽屉中列出了许多页面/片段,用户可能经常在这些页面/片段之间切换,我希望它们在后台堆栈中以便他们可以导航回来,但我只想在后台堆栈中使用每个片段的一个实例用户不必按下疯狂的次数退出应用程序。 我无法弄清楚如何在没有删除页面的情况下有效地“重新排序”后台堆栈。 目前,当我更改页面时,我正在使用此代码更改片段并确保它仅在后面的堆栈中一次 if (mFragMgr == null) { mFragMgr = getSupportFragmentManager(); } String backStateName = fragmentDescriptor.name(); boolean fragmentPopped = mFragMgr.popBackStackImmediate(backStateName, 0); if (!fragmentPopped){ mFragMgr.beginTransaction() .remove((Fragment) mFragment) .replace(R.id.content_frame, (Fragment) mFragment) .addToBackStack(backStateName) .commit(); } 我在onBackPressed中使用此代码 @Override public void onBackPressed() { if (mFragMgr.getBackStackEntryCount() > 0) { mFragMgr.popBackStackImmediate(); } else { super.onBackPressed(); } } 这有效,但这意味着它删除了我不想删除的页面。 例: 当我的用户按照A > B […]

Android:返回上一个片段

我已经实现了Navigation Drawer,它是Activity的子类。 我的应用程序中有很多片段。 我的问题在这里 想象一下有3个片段: Fragment_1:Fragment_2:Fragment_3 当我启动我的应用程序时,Fragment_1被加载当我点击Fragment_1上的一些组件时,我将导航到Fragment_2,依此类推。 就这样 Fragment_1> Fragment_2> Fragment_3 当我从Fragment_2按回键时,我将导航回Fragment_1但是当我从Fragment_3按回键时,我将导航回Fragment_1(而不是Fragment_2) 我在Back Key按下的应用程序中想要这样的东西 Fragment_1 <Fragment_2 <Fragment_3 我使用Fragment,FragmentManager,FragmentTransaction如下: MyFragment fragment = new MyFragment(); FragmentManager fragmentManager = getFragmentManager(); fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).addToBackStack(null)commit(); 我尝试在我的MainActivity中覆盖onBackPressed(): @Override public void onBackPressed() { getFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE); int count = getFragmentManager().getBackStackEntryCount(); if (count == 0) super.onBackPressed(); }