Android ListFragment不会在onSaveInstanceState()中保存包,也不会在onActivityCreated()中检索包

Mar*_*ria 13 android bundle screen-orientation android-fragments android-3.0-honeycomb

我是android的新手,我面临以下问题.我正在为Android 2和3开发,这就是我使用片段的原因.然而,为了使应用程序在Android 2设备上运行,我导入android.support.v4.app.ListFragment.当屏幕方向改变时,我需要在ListFragment中保持选择.我正在重写onSaveInstanceState()方法并将int放入bundle中.旋转屏幕时,将调用此方法并将int添加到包中.但是,在onActivityCreated()调用时,其bundle为null.我遵循Android网站上提供的示例:http://developer.android.com/reference/android/app/Fragment.html,但如上所述 - 在onSaveInstanceState()调用之后,bundle in onActivityCreated()仍为null.

这是代码:

import android.support.v4.app.ListFragment;
public class VisitsHomeFragment extends ListFragment {
    private int selectedPosition = -1;  

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        if (savedInstanceState != null) {
          if (savedInstanceState.containsKey("SELECTED_POSITION")) {
                selectedPosition = savedInstanceState.getInt("SELECTED_POSITION");
          }
        }
    }

    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putInt("SELECTED_POSITION", selectedPosition);
    }
}
Run Code Online (Sandbox Code Playgroud)

我很感激这个问题的任何帮助.

Gal*_*lal 7

我遇到了同样的问题,添加android:id到布局文件中的fragment元素修复了这个问题.

FragmentManager在重新创建片段时,似乎使用id来发送适当的包.


小智 2

我遇到了同样的问题,最终我发现它是在两种不同布局(纵向和横向)的片段元素上具有不同的 android:id 属性值。