如何在浏览活动时保存片段状态

时间:2016-04-20 11:01:31

标签: android android-fragments android-activity

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

我的应用中有两项活动。让我们说他们的名字是" ActivityA" " ActivityB" 。在" ActivityA"片段很少。让我们说他们的名字是" FragmentA" " FragmentB" " FragmentC" " FragmentD" 等。默认片段是" FragmentA" ,这意味着当活动开始时#34; FragmentA"开始。

现在,如果我导航到" ActivityB" ,然后回到" ActivityA" ,它总是打开" FragmentA" 。但我想要的是如果我导航到" FragmentB" ,然后导航到" ActivityB" ,然后返回" ActivityA" 它开始" FragmentA" ,但我想要" FragmentB" 来开始,我之前是

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

您可能正在通过startActivity() ActivityB 重新启动 ActivityA ,而不是完成 ActivityB 。如果是这样,请完成 ActivityB 。然后,您将看到 ActivityA 中最后显示的片段。

或者您也可以使用onSaveInstanceState方法跟踪Fragments。这个answer可以帮助您解决此问题。

或者在 ActivityA 中使用以下内容也可以解决您的问题:

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

答案 2 :(得分:1)

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

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

创建Fragment类的实例并将其设置为null

Fragment lastVisibleFragment = null;
onPause

保存最后一个片段

  @Override
    protected void onPause() {
        super.onPause();
         lastVisibleFragment = getVisibleFragment();
    }

然后在onResume()中添加您所在的最后一个片段(如果不为空)

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