【发布时间】:2014-06-26 21:05:58
【问题描述】:
我正在处理以下tutorial,它有问题:它会在每次屏幕旋转后重新创建片段。
我通过在 QuoteViewerActivity 中添加 if(savedInstanceState == null) 修复了关于 TitlesFragment 类的问题:
mFragmentManager = getFragmentManager();
//ADDED THIS CONDITION
if(savedInstanceState == null){
FragmentTransaction fragmentTransaction = mFragmentManager
.beginTransaction();
fragmentTransaction.add(R.id.title_fragment_container, mTitlesFragment);
fragmentTransaction.commit();
}
它为片段 TitlesFragment 修复了它,但是对于片段 QuoteFragment 它仍然在每次屏幕方向更改时重新创建它,因为在本教程中,片段是在 onclick 事件中创建的:
@Override
public void onListSelection(int index) {
if (!mDetailsFragment.isAdded()) {
FragmentTransaction fragmentTransaction = mFragmentManager
.beginTransaction();
fragmentTransaction.add(R.id.quote_fragment_container, mDetailsFragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
mFragmentManager.executePendingTransactions();
}
if (mDetailsFragment.getShownIndex() != index) {
mDetailsFragment.showIndex(index);
}
}
注意 setRetainInstance(true) 在两个片段的 onCreate() 中都设置了。
我尝试添加此检查,但没有解决:
@Override
public void onListSelection(int index) {
//ADDED THE FOLLOWING TWO LINES
Fragment f = mFragmentManager.findFragmentById(R.id.quote_fragment_container);
if(f == null)
//===============================
if (!mDetailsFragment.isAdded()) {
FragmentTransaction fragmentTransaction = mFragmentManager
.beginTransaction();
fragmentTransaction.add(R.id.quote_fragment_container, mDetailsFragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
mFragmentManager.executePendingTransactions();
}
if (mDetailsFragment.getShownIndex() != index) {
mDetailsFragment.showIndex(index);
}
}
==> 每次我旋转屏幕并复制现有菜单时,它都会重新创建此 Fragment(在此快照中进行了说明):
我做错了什么,解决此问题的最佳做法是什么?谢谢!
【问题讨论】:
标签: android android-fragments screen-orientation android-listfragment