我有一个包含两个片段的活动:DogFragment,LegoFragment。在纵向模式下,我显示DogFragment,在横向模式下,我显示LegoFragment。我的问题是,片段在旋转后无法记住它们的状态。有没有办法保存片段的状态?了解该活动是在方向更改期间重新创建的,并且基于我创建的方向并将DogFragment或LegoFragment附加到该活动。

这是活动的onCreate方法,我在其中添加片段。

@Override

protected void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);

  setContentView(R.layout.activity_main);

  if (getResources().getConfiguration().orientation ==
     Configuration.ORIENTATION_PORTRAIT) {

   addDogFragment();

  } else {
  
    addLegoFragment();

  }

}

private void addDogFragment() {
  DogFragment fragment = DogFragment.newInstance(null, null);

  getSupportFragmentManager().beginTransaction().
  replace(R.id.fragment_container, fragment).commit();

}



private void addLegoFragment() {

  LegoFragment fragment = LegoFragment.newInstance(null, null);

  getSupportFragmentManager().beginTransaction().
  replace(R.id.fragment_container, fragment).commit();

}


我知道FragmentManager有我的片段的副本。但是我不确定解决此问题的最佳方法。如果我使用标签调用replace,是否只是findByTag然后再次调用replace?还是有一种标准的方式来做这些事情?

最佳答案

试试这个,为LegoFragment创建一个类似的函数

private void setDogFragment() {
    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
    Fragment removeFragment = mFragmentManager.findFragmentByTag("lego");
    if (removeFragment!=null) {
        transaction.detach(removeFragment);
    }
    Fragment fragment = mFragmentManager.findFragmentByTag("dog");
    if (fragment != null) {
        transaction.attach(fragment);
    } else {
        fragment = new DogFragment();
        transaction.add(R.id.fragment_container, fragment,
                "dog");
    }
    transaction.commit();
}

关于android - 屏幕方向更换后如何恢复 fragment ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32430105/

10-09 00:08