2014-08-27 77 views
0

我有两个活动,活动A和活动B.现在活动A有3 Fragments其中之一启动活动B.当我按动作栏按钮它返回到活动A但显示默认Fragment。我正在使用navUtils.navigateupFromSameTask回到之前的Activity我怎样才能去活动显示的片段与以前的活动

我怎么能最新Fragment用户使用show,而不是用户第一次启动应用时出现的默认显示?例如,当应用程序启动时,它显示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); 
} 
+0

你如何的活动为您添加的片段?通常情况下,Android的片段管理器将处理恢复最后显示的片段。 – JimmyVanBraun 2014-08-27 11:41:11

+0

@AndroidGuy对不起,对于延迟回复,但我的互联网连接时断时续。添加代码添加片段 – 2014-08-29 08:00:45

+0

@NehaShukla:嗨,我注意到你已经添加内联代码跨度(像这样)到编辑时的帖子;这些仅适用于句子中的实际代码。另外,请务必在帖子中解决许多问题,比如“提前致谢”和“请帮助”。谢谢! – 2014-09-01 10:03:51

回答

0

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

你的问题是,你信任savedInstanceState来决定是否应该重新创建你的片段。但是,只有当活动被破坏时才会调用onSaveInstanceState(),当您导航到下一个活动时,这不会立即发生。

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

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