在我的应用程序中,有一个由Fragment呈现的主菜单。单击按钮时,主菜单片段将被第二个片段替换,以显示所请求的内容。还有一个通过Back Stack向后导航。
所有这一切都完美无缺,直到我旋转屏幕并单击按钮。不知怎的,第二个片段不再显示了,尽管调用了第二个片段的onStart()方法。剩下的只是屏幕上的主菜单布局。
这是onclick()方法中的代码:
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
boolean notExists = (newEntryFragment == null);
if(notExists || fm.findFragmentByTag(NewEntryFragment.class.getName())== null){
if(notExists)
newEntryFragment = new NewEntryFragment();
ft.replace(R.id.fragment_container, newEntryFragment , NewEntryFragment.class.getName());
ft.addToBackStack(null);
ft.commit();
}
else if(newEntryFragment.isHidden()){
ft.show(newEntryFragment).commit();
}
这是我恢复活动的方式:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(savedInstanceState != null){
Log.d("MyActivity" , "savedInstance is not null");
newEntryFragment = (NewEntryFragment) getSupportFragmentManager().findFragmentByTag(NewEntryFragment.class.getName());
}
setContentView(R.layout.activity_my);
createMainMenu();
}
public void createMainMenu(){
mainMenuFragment = new MainMenuFragment();
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.add(R.id.fragment_container, mainMenuFragment);
ft.commit();
}
Second Fragment代码:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
setRetainInstance(true);
view = inflater.inflate(R.layout.fragment_new_entry, container, false);
return view;
}
@Override
public void onStart() {
super.onStart();
MyActivity myActivity = (MyActivity) getActivity();
myActivity.setTitle("New Entry");
myActivity.getActionBar().setDisplayHomeAsUpEnabled(true);
}
我还有什么需要恢复的吗?也许是fragment_container?
发生这种情况时,我没有收到任何错误。
答案 0 :(得分:0)
好的,我解决了自己的问题。
我只需要像这样恢复活动:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(savedInstanceState != null){
Log.d("MyActivity" , "savedInstance is not null");
newEntryFragment = (NewEntryFragment) getSupportFragmentManager().findFragmentByTag(NewEntryFragment.class.getName());
}else{createMainMenu();
}
setContentView(R.layout.activity_my);
}
因此每次旋转时都不会再创建MainMenu。