我有一些想要在片段的生命周期中保存的状态。例如,当屏幕旋转时它工作正常,但是当进程被杀死并从磁盘恢复时(我认为这就是它的工作方式),我得到一个 ClassCastException。这是一些代码:
初始化:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState == null) {
playlistsMap = new LinkedHashMap<Section, List<Playlist>>();
} else {
playlistsMap = (LinkedHashMap<Section, List<Playlist>>) savedInstanceState.getSerializable(PLAYLISTS_MAP_KEY);
}
setHasOptionsMenu(true);
}
保存数据:
@Override
public void onSaveInstanceState(Bundle outState) {
if (isEverySectionsLoaded()) {
outState.putSerializable(PLAYLISTS_MAP_KEY, playlistsMap);
} else {
outState.putSerializable(PLAYLISTS_MAP_KEY, new LinkedHashMap<Section, List<Playlist>>());
}
// ...
}
我从演员中得到的例外onCreate
:
04-10 01:06:43.430 E/AndroidRuntime(28549): FATAL EXCEPTION: main
04-10 01:06:43.430 E/AndroidRuntime(28549): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mydomain.android/com.mydomain.android.ui.MainActivity}:
java.lang.ClassCastException: java.util.HashMap cannot be cast to java.util.LinkedHashMap
我知道在 Android 上使用 parcelables 会更好,但我仍然不明白这怎么可能发生。
有任何想法吗?