我试图保留一个片段,不仅是因为配置更改而重新创建活动,而且还因为某些其他原因重新创建了活动,例如当用户离开并返回第二个时后来。显然,它不起作用,因为在下面的代码中
homeMapFragment = (MapFragment)getFragmentManager().findFragmentByTag(homeMapFragmentTag);
if(homeMapFragment == null) {
homeMapFragment = new MapFragment();
homeMapFragment.setRetainInstance(true);
getFragmentManager().beginTransaction().add(R.id.map_fragment_placeholder, homeMapFragment, homeMapFragmentTag).commit();
}
执行始终进入if
分支。这是一个失败的原因,还是我可以在这里做些什么?
澄清:这个片段实际上是可见的。我的目的不是在不同的活动之间保留一些数据,而是保留视图本身。这是一个地图视图,初始化地图需要一些时间,我想避免这种情况。
答案 0 :(得分:2)
显然,它不起作用
这是因为保留的片段仅保留用于配置更改,而不是其他事件。
onSaveInstanceState()
涵盖了更多场景(例如,用户按下HOME,稍后会终止您的进程,然后用户通过recent-tasks列表返回到您的应用)。
然而,即使这样也没有涵盖你似乎在描述的东西:用户按下BACK,然后按下一些东西,将它们返回到他们离开的同一个活动。在这种情况下,从Android的角度来看,这些是两个逻辑上不同的活动实例,并没有真正相关。如果要保留它们之间的数据,最好由后备存储(例如,数据库,SharedPreferences
或其他文件)处理,可选地使用一些内存缓存来节省I / O时间。