Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用活动显示的片段转到上一个活动_Java_Android - Fatal编程技术网

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

Java 如何使用活动显示的片段转到上一个活动,java,android,Java,Android,我有两个活动,活动A和活动B。现在活动A有3个片段,其中一个启动活动B。当我按下操作栏按钮时,它返回到活动A,但显示默认的片段。我使用navUtils.navigateupFromSameTask返回上一个活动 如何让用户使用的最新片段显示,而不是用户首次启动应用程序时显示的默认片段?例如,当应用程序启动时,它会显示Fragmentone。当用户转到Fragment2并从中启动活动B时,我想返回到显示Fragment 2的上一个活动 @Override public boolean onOpti

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

如何让用户使用的最新
片段
显示,而不是用户首次启动应用程序时显示的默认片段?例如,当应用程序启动时,它会显示
Fragment
one。当用户转到
Fragment
2并从中启动活动B时,我想返回到显示Fragment 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);
}
然后
选择项目

 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);
}

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

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

如果已经添加了片段,则应在活动A的
onCreate()
方法中查询
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

如何在活动A中添加片段?正常情况下,androids片段管理器将处理恢复最后显示的片段的工作。@AndroidGuy很抱歉回复太晚,但我的internet连接已断开一段时间。添加了用于添加片段的代码fragment@NehaShukla:您好,我注意到您在编辑帖子时向帖子中添加了内联代码跨距(
,如下图所示);这些仅适用于句子中的实际代码。另外,请确保在你能找到的帖子中修复尽可能多的问题——像“提前感谢”和“请帮助”这样的东西是不必要的。谢谢