如何从活动回到以前的片段?

我有一个导航抽屉的应用程序,这是切换片段。 从这些片段中,我正在调用一个新的活动。 当我点击这个活动(在工具栏中)时,我想返回到上一个选定的片段,而是把它放回到第一个片段。 我正在添加我的片段回栈,所以这不应该是一个问题。

这是我已经尝试过的:

我已经在我的第二个活动中覆盖了onBackPressed方法,如下所示:

@Override public void onBackPressed() { if (getFragmentManager().getBackStackEntryCount() == 0) { this.finish(); } else { getFragmentManager().popBackStack(); } } 

它不工作。 我也保存了onsaveinstancestate方法中的当前片段的索引,并检索它,但结果相同。 我也试着总是把当前的片段放在variables中,并尝试重新显示它,但仍然不起作用。 还有什么我可以尝试?

有趣的事实:如果我按下底部面板,它实际上回到以前的片段。

编辑:这是我这样做的代码:

  private void replaceFragment(Fragment fragment) { if (fragment != null) { FragmentManager manager = getSupportFragmentManager(); manager.beginTransaction() .replace(R.id.main_content, fragment) .addToBackStack(null) .commit(); } } 

如果savedInstanceState为null,则只添加第一个片段,如下所示:

 if (savedInstanceState == null) { // first time mTitle = getResources().getString(R.string.home); replaceFragment(HomeFragment.newInstance()); } 

是的,所有这些都是在onCreate()方法中完成的。

Solutions Collecting From Web of "如何从活动回到以前的片段?"

我有同样的问题,并得到修复。 你唯一需要做的就是覆盖活动中的“onOptionsItemSelected”方法:

 @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == android.R.id.home) { finish(); return true; } return super.onOptionsItemSelected(item); } 

android.R.id.home是你的菜单中的第一个片段。

尝试

 getFragmentManager().popBackStackImmediate(); 

它为我工作。

我倾向于这样做

 @Override public void onBackPressed() { if (getFragmentManager().getBackStackEntryCount() == 0) { this.finish(); } else { super.onBackPressed(); //replaced } } 

这样它就可以自己处理片段内容,但是当没有剩余的片段返回时,它就完成了这个活动。

编辑:UP导航可以重新创build您以前的活动,即使它已经存在。 为了防止发生这种情况,请重新定义onOptionsItemSelectedUp导航事件,如下所示:

 public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: Intent parentIntent = NavUtils.getParentActivityIntent(this); if(parentIntent == null) { finish(); return true; } else { parentIntent.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT | Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); startActivity(parentIntent); finish(); return true; } } return super.onOptionsItemSelected(item); } 

对不起,我没有足够的声望发表评论。 所以我必须猜测。 我曾经有过同样的问题。 听起来像一个与活动生命周期相关的问题( http://developer.android.com/reference/android/app/Activity.html#ProcessLifecycle )。 一定要添加你的第一个片段一次,因为你的活动的片段pipe理器是有能力的生命周期。 因此,将第一个片段添加到片段pipe理器的语句应该被if (savedInstanceState == null) { ... }包围。

当你从其他活动的片段中调用一个活动时,那么以前活动的实例状态(即具有片段实例状态的调用活动)将被保存在堆栈中…所以你只需要完成被调用的活动,您从中调用第二个活动的片段。

 @Override public void onBackPressed() { finish(); } 

我明白,人们仍然在试图帮助我。 这个答案帮助我解决了我的问题: Android – 导航从活动到片段