如何使用活动显示的片段转到上一个活动

Posted

技术标签:

【中文标题】如何使用活动显示的片段转到上一个活动【英文标题】:How can I go to previous activity with the fragment the activity was showing 【发布时间】:2014-10-20 23:28:37 【问题描述】:

我有两个活动,活动 A 和活动 B。现在活动 A 有 3 个Fragments,其中一个启动活动 B。当我按下操作栏按钮时,它返回到活动 A,但显示默认的 Fragment。我正在使用navUtils.navigateupFromSameTask 回到以前的Activity

如何让用户使用的最新Fragment 显示而不是用户第一次启动应用程序时显示的默认值?例如,当应用程序启动时,它会显示Fragment 一个。当用户转到Fragment 2 并从中启动活动 B 时,我想返回上一个显示片段 2 的活动

@Override
public boolean onOptionsItemSelected(MenuItem item)
    switch(item.getItemId())
    case android.R.id.home:
        NavUtils.navigateUpFromSameTask(this);
        return true;
    
    return super.onOptionsItemSelected(item);

在我的 onCreate 方法中

if (savedInstanceState == null) 
    fragmentManager = getFragmentManager();
    fragment = new Radiosound();
    selectItem(0);

然后selectItem:

 private void selectItem(int position) 

    // update the main content by replacing fragments
 activeFrag = position;
 if(position == 0)
    fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit();
 
 else if(position == 1)
     if(conv == null)
     conv = new Conversations();
     fragmentManager.beginTransaction().replace(R.id.content_frame, conv).commit();
  else
     fragmentManager.beginTransaction().replace(R.id.content_frame, (new Preferences())).commit();
 
    // update selected item and title, then close the drawer
    mDrawerList.setItemChecked(position, true);
    setTitle(fragments[position]);
    mDrawerLayout.closeDrawer(mDrawerList);

【问题讨论】:

如何在 Activity A 中添加片段?通常androids片段管理器将处理恢复最后显示的片段。 @AndroidGuy 抱歉回复晚了,但我的互联网连接中断了一段时间。添加了添加片段的代码 @NehaShukla:嗨,我注意到您在编辑帖子时一直在添加内联代码跨度 (like this);这些仅适用于句子中的实际代码。此外,请确保在帖子中尽可能多地解决您可以找到的问题——诸如“提前致谢”和“请帮助”之类的内容不是必需的。谢谢! 【参考方案1】:

当您从活动 B 返回到活动 A 时,您会重新创建片段,因此它将始终显示您的片段 1 而不是您想要的片段 2。

您的问题是,您信任 savedInstanceState 来决定是否应该重新创建您的片段。但是,onSaveInstanceState() 仅在 Activity 被销毁时被调用,当您导航到下一个 Activity 时不会立即发生这种情况。

如果已经添加了片段,您应该在活动 A 的 onCreate() 方法中查询 FragmentManager,否则您将进行初始片段创建。为此,我会添加一个 TAG 以更好地找到您的片段。

private static final String FRAGMENT_TAG_CONVERSATION = "frag_conv";
...
fragmentManager.beginTransaction().replace(R.id.content_frame, conv, FRAGMENT_TAG_CONVERSATION).commit();

然后您可以检查,如果您已经添加了片段:

 if(fragmentManager.findFragmentByTag(FRAGMENT_TAG_CONVERSATION) == null))
     // only add it here

【讨论】:

以上是关于如何使用活动显示的片段转到上一个活动的主要内容,如果未能解决你的问题,请参考以下文章

在活动中使用 OnBackPressed 方法的一个片段到另一个片段

从片段返回到上一个活动 onclick back button

当应用程序处于固定模式并且我注销时,会显示登录活动。但是,如果我点击后退按钮,它会转到上一个活动

如何使用导航组件在活动中并排显示 2 个片段 [关闭]

如何在地图片段活动上显示按钮

如何在片段中使用与活动中不同的菜单?