Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/211.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
Android 如何在活动中导航时保存片段状态_Android_Android Fragments_Android Activity - Fatal编程技术网

Android 如何在活动中导航时保存片段状态

Android 如何在活动中导航时保存片段状态,android,android-fragments,android-activity,Android,Android Fragments,Android Activity,可能问题的标题不清楚。或者我没有描述我在寻找什么 我的应用程序中有两个活动。让我们说他们的名字是“ActivityA”和“ActivityB”。在“活动A”下,几乎没有片段。让我们说他们的名字是“FragmentA”“FragmentB”“FragmentC”“FragmentD”等等。默认片段是“FragmentA”,这意味着当活动开始时,“FragmentA”开始 现在,如果我导航到“ActivityB”,然后返回到“ActivityA”,它总是打开“FragmentA”。但我想要的是,如果

可能问题的标题不清楚。或者我没有描述我在寻找什么

我的应用程序中有两个活动。让我们说他们的名字是“ActivityA”“ActivityB”。在“活动A”下,几乎没有片段。让我们说他们的名字是“FragmentA”“FragmentB”“FragmentC”“FragmentD”等等。默认片段是“FragmentA”,这意味着当活动开始时,“FragmentA”开始


现在,如果我导航到“ActivityB”,然后返回到“ActivityA”,它总是打开“FragmentA”。但我想要的是,如果我导航到“FragmentB”,然后导航到“ActivityB”,然后返回到“ActivityA”,它会启动“FragmentA”,但我想启动“FragmentB”,我以前在中不确定我是否正确理解你,但我认为你需要做的是
startActivityForResult
当你调用你的活动b时。当您按下BackButton时,您将提供有关要调用的片段的必要信息,并在ActivityB的ActivityResult上捕获这些信息,然后导航到所需片段。

不确定我是否正确理解您的意思,但我认为你需要做的是
startActivityForResult
当你调用你的活动b时。按BackButton时,您提供了有关要调用的片段的必要信息,并在ActivityB的
onActivityResult
中捕获这些信息,然后导航到所需片段。

您可能正在通过
startActivity()从ActivityB重新启动ActivityA
而不是完成活动b。如果是这样,只需完成您的活动b。然后您将进入活动a中最后显示的片段

或者也可以使用
onSaveInstanceState
方法来跟踪
片段。这可以帮你解决这个问题

或者在活动中使用以下选项a也可以解决您的问题:

<activity android:name=".ActivityA" android:launchMode="singleTop">

您可能正在通过
startActivity()
ActivityB重新启动ActivityA,而不是完成ActivityB。如果是这样,只需完成您的活动b。然后您将进入活动a中最后显示的片段

或者也可以使用
onSaveInstanceState
方法来跟踪
片段。这可以帮你解决这个问题

或者在活动中使用以下选项a也可以解决您的问题:

<activity android:name=".ActivityA" android:launchMode="singleTop">

创建一个返回最后一个可见片段的方法

 public Fragment getVisibleFragment(){
        FragmentManager fragmentManager = MainActivity.this.getSupportFragmentManager();
        List<Fragment> fragments = fragmentManager.getFragments();
        if(fragments != null){
            for(Fragment fragment : fragments){
                if(fragment != null && fragment.isVisible())
                    return fragment;
            }
        }
        return null;
    }
onPause
中保存最后一个片段

  @Override
    protected void onPause() {
        super.onPause();
         lastVisibleFragment = getVisibleFragment();
    }
然后在
onResume()
中添加最后一个片段(如果不是null)

   @Override
    protected void onResume() {
        super.onResume();
        if(lastVisibleFragment !=null){    
            getSupportFragmentManager().beginTransaction()
                    .add(yourFrameLayout, lastVisibleFragment)
                    .commit();
        }
       else{ //Add first fragment you were adding}
    }

创建一个返回最后一个可见片段的方法

 public Fragment getVisibleFragment(){
        FragmentManager fragmentManager = MainActivity.this.getSupportFragmentManager();
        List<Fragment> fragments = fragmentManager.getFragments();
        if(fragments != null){
            for(Fragment fragment : fragments){
                if(fragment != null && fragment.isVisible())
                    return fragment;
            }
        }
        return null;
    }
onPause
中保存最后一个片段

  @Override
    protected void onPause() {
        super.onPause();
         lastVisibleFragment = getVisibleFragment();
    }
然后在
onResume()
中添加最后一个片段(如果不是null)

   @Override
    protected void onResume() {
        super.onResume();
        if(lastVisibleFragment !=null){    
            getSupportFragmentManager().beginTransaction()
                    .add(yourFrameLayout, lastVisibleFragment)
                    .commit();
        }
       else{ //Add first fragment you were adding}
    }

如果您提供一些简短的代码来从活动B导航到活动A会更好,您是使用intent启动活动A还是使用back按钮?我使用back按钮添加默认片段的活动生命周期是什么?或者片段是通过xml添加的?默认片段是在onCreate中添加的。如果您提供一些简短的代码来从活动B导航到活动A会更好,您是使用intent启动活动A还是使用back按钮?我使用back按钮您添加默认片段的活动生命周期是什么?或者片段是通过xml添加的?默认片段是在OnCreate中添加的。我已经尝试过您的方法。我的应用程序中有一个导航抽屉。getVisibleFragment()返回我的导航抽屉Fragmenti我已经尝试过你的方法。我的应用程序中有一个导航抽屉。getVisibleFragment()返回我的导航抽屉片段