如何使用活动显示的片段转到上一个活动
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