2012-01-05 46 views
2

之间我就按一下按钮充气视图,用户可以为自己喜欢添加尽可能多的观点,所有的罚款我做了工作,但现在的问题是当我返回一个活动并再次返回到我的动态生成活动时,生成的每个视图都消失了。类似的情况下,如果我去下一个活动,并回到膨胀的活动。我知道onSaveInstanceonRestoreSaveInstance。但是,如何将视图信息放在onSaveInstanceState的捆绑包中?请注意,我的视图是动态生成的,即按钮单击,我想知道如何保留我的活动状态。 你如何去做呢?保存例如当我们来回切换活动

+0

我仍然在寻找解决方案... – 2012-01-06 15:57:04

回答

3

我在想,你应该实现某种逻辑,可以帮助您恢复您的Views的状态。所以,你应该设计一个类,让说ViewDetail,不知怎的,保存有关要添加....类型,尺寸等,此类应该实现Parcelable,所以你可以把它添加到bundleViews细节。

所以,你会保持一个ArrayList<ViewDetail>myViews其中每次用户添加新View您创建一个新的ViewDetail对象添加到您myViews阵列。

,然后保存Views,并使用这些对象的还原它们:

@Override 
protected void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    //save your view states 
    outState.putParcelableArrayList("MY_VIEWS",myViews); 
} 

@Override 
protected void onRestoreInstanceState(Bundle savedInstanceState) { 
    super.onRestoreInstanceState(savedInstanceState); 
    //get the views back... 
    myViews=savedInstanceState.getParcelableArrayList("MY_VIEWS"); 
    //TODO: add the views back to your Activity 
} 
+0

如何的意见被写入到一个包裹对象? – 2012-01-05 13:48:14

+0

非常感谢您的回答,现在让我试试。 – 2012-01-05 13:48:53

1

随着应用程序可完全在任何时刻,而不用您noticem提供长期储存堆外存储

你杀了如果您的活动已终止(并且可能在任何时间),则只需恢复所有视图。当它被终止后再次激活,它通过onCreate()方法 - 这将是恢复活动状态适当的位置。

只有这guaranted您的应用程序/ activity被销毁之前调用回调函数的onPause() - 这是一个合适的地方来保存视图状态到长期堆外存储。

+0

我相信当我回击时,动态活动已完成..有没有办法在用户回击时完成活动? – 2012-01-06 10:40:48

+0

这取决于内存状态 - 如果有足够的内存,它只是暂停,以防您的用户很快再次激活它。 (onResume()将被调用)另一种情况是接通电话 - 这有优先权,也暂停你的活动而不杀死它。另一个原因是电话方向改变 - 活动将被终止并重启,除非你明确地处理。当启动器将要锁定时,它会强制你的活动进入portait布局 – 2012-01-06 11:11:35