android - 如何在屏幕方向更换后恢复 fragment

标签 android android-fragments screen-orientation

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

这是我添加 fragment 的 Activity 的 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 有我的 fragment 的副本。但我不确定解决这个问题的最佳方法。如果我用标签调用 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/

相关文章:

android:webView 处理方向变化

jquery - Android 上的两个 json 请求后 phonegap 应用程序崩溃

android - 一个按钮在左侧另一个在右侧

android - 如何在android中修改我的自定义属性文件

Android:切换 fragment 后按钮 onClicklistener 不起作用

android - 单击时关闭 DialogFragment

Viewpager Fragment 中的 Android Listview - 无滚动

ios - 如何处理 AVCaptureVideoPreviewLayer 的设备旋转?

java - 如何在 Android Studio 自己的方法中检索从 For 循环所做的值更改?

ios - 横向时的 UIPageControl 和 UIScrollView