屏幕旋转后片段不再显示

时间:2014-11-25 19:55:46

标签: android android-fragments

在我的应用程序中,有一个由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?

发生这种情况时,我没有收到任何错误。

1 个答案:

答案 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。