【发布时间】:2014-10-04 12:41:55
【问题描述】:
我有一个名为 MainActivity 的活动,其中有一个名为“HomeFragment”的片段。我想在屏幕旋转后恢复片段,但是似乎缺少一些东西。 我遵循以下流程:
- 在
onSaveInstanceState期间使用getSupportFragmentManager().putFragment(...)保存片段 - 尝试在 onCreate 期间通过
fragmentManager.findFragmentByTag恢复片段(在检查该捆绑包不为空之后)
但是findFragmentByTag 返回 null。
这是 MainActivity 中的代码 sn-ps:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Set up the action bar to show a dropdown list.
final ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayShowTitleEnabled(false);
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
setupNavigationSpinner(actionBar);
FragmentManager fragmentManager = getSupportFragmentManager();
if (savedInstanceState != null) {
if (fragmentManager.findFragmentByTag("frag") != null) {
// findFragmentByTag always return null
homeFragment = (HomeFragment) fragmentManager
.findFragmentByTag(HomeFragment.ARG_ITEM_ID);
contentFragment = homeFragment;
}else{
homeFragment = new HomeFragment();
switchContent(homeFragment, HomeFragment.ARG_ITEM_ID);
}
} else {
homeFragment = new HomeFragment();
switchContent(homeFragment, HomeFragment.ARG_ITEM_ID);
}
}
@Override
public void onSaveInstanceState(Bundle outState) {
getSupportFragmentManager().putFragment(outState, "frag",homeFragment );
}
public void switchContent(Fragment fragment, String tag) {
FragmentManager fragmentManager = getSupportFragmentManager();
while (fragmentManager.popBackStackImmediate())
;
if (fragment != null) {
FragmentTransaction transaction = fragmentManager
.beginTransaction();
transaction.replace(R.id.content_frame, fragment, tag);
// Only ArticlDetailFragment is added to the back stack.
if (!(fragment instanceof Fragment)) {
transaction.addToBackStack(tag);
}
transaction.commit();
contentFragment = fragment;
}
}
【问题讨论】:
-
由于某种原因我遇到了同样的问题。
-
呃...你可能想告诉我们
switchContent发生了什么。 -
HomeFragment.ARG_ITEM_ID是否等于"frag"?你为什么要检查"frag"?如我所见,您正在用HomeFragment.ARG_ITEM_ID标签替换您的片段。
标签: android android-fragments screen-rotation onrestoreinstancestate