我有一个包含两个 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/