由于仅更改配置,在重新创建活动时,保留的片段是否有效?

时间:2015-05-06 15:02:49

标签: android android-fragments

我试图保留一个片段,不仅是因为配置更改而重新创建活动,而且还因为某些其他原因重新创建了活动,例如当用户离开并返回第二个时后来。显然,它不起作用,因为在下面的代码中

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分支。这是一个失败的原因,还是我可以在这里做些什么?

澄清:这个片段实际上是可见的。我的目的不是在不同的活动之间保留一些数据,而是保留视图本身。这是一个地图视图,初始化地图需要一些时间,我想避免这种情况。

1 个答案:

答案 0 :(得分:2)

  

显然,它不起作用

这是因为保留的片段仅保留用于配置更改,而不是其他事件。

onSaveInstanceState()涵盖了更多场景(例如,用户按下HOME,稍后会终止您的进程,然后用户通过recent-tasks列表返回到您的应用)。

然而,即使这样也没有涵盖你似乎在描述的东西:用户按下BACK,然后按下一些东西,将它们返回到他们离开的同一个活动。在这种情况下,从Android的角度来看,这些是两个逻辑上不同的活动实例,并没有真正相关。如果要保留它们之间的数据,最好由后备存储(例如,数据库,SharedPreferences或其他文件)处理,可选地使用一些内存缓存来节省I / O时间。