【发布时间】:2011-07-27 14:33:21
【问题描述】:
我是 android 新手,我面临以下问题。我正在同时开发 Android 2 和 3,这就是我使用片段的原因。但是,为了使应用程序在 Android 2 设备上运行,我导入了 android.support.v4.app.ListFragment。当屏幕方向发生变化时,我需要在我的 ListFragment 中保持选择。我正在覆盖 onSaveInstanceState() 方法并将一个 int 放入包中。当屏幕旋转时,调用此方法并将 int 添加到包中。但是,当调用 onActivityCreated() 时,它的捆绑包为空。我正在按照Android网站上提供的示例:http://developer.android.com/reference/android/app/Fragment.html,但如上所述-在调用onSaveInstanceState()之后,onActivityCreated()中的捆绑包仍然为空。
代码如下:
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);
}
}
我将不胜感激任何有关此问题的帮助。
【问题讨论】:
-
onRestoreInstanceState() 不适用于片段。
-
我唯一的建议是调试兼容源,看看你是否能掌握正在发生的事情。
-
您可以尝试添加一个日志语句来查看是否调用了 onSaveInstanceState。我似乎遇到了同样的问题,据我所知,它甚至从未被调用过。类似 Log.d("TEST", "onSaveInstanceState called!");在你的 onSaveInstanceState 结束时应该能够告诉你它是否被调用。
-
正如我在第一篇文章中提到的,
onSavaInstanceState()被调用,我检查了它。包裹像在希思罗机场一样丢失了:-) -
我使用了示例项目(HoneycombGallery),向其中添加了兼容性库,一切正常......在我的应用程序中 - 它没有。对我来说临时的解决方案是在 Manifest 中添加
android:configChanges="orientation",但这并没有解决丢失捆绑包的谜团(实际上是在考虑写一本名为“丢失捆绑包之谜”的冒险书;-))。
标签: android bundle android-3.0-honeycomb android-fragments screen-orientation