android以编程方式创建视图

时间:2012-12-25 20:00:20

标签: android view android-activity android-lifecycle

我以编程方式创建一个RelativeLayout,其中包含一些其他视图,并将其添加到以XML定义的父级。但是,在重新创建活动之后,以编程方式创建的所有视图(包括布局)都会消失。我是否需要SharedPreferences对象来保存值然后重新创建布局,还是有更简单的方法来保存它?

P.S。所有新创建的视图都会分配一个ID

2 个答案:

答案 0 :(得分:3)

我建议您查看Activity.onSaveInstanceState(Bundle)

  

默认实现通过在具有id 的层次结构中的每个视图上调用onSaveInstanceState()来为您处理大多数UI每个实例状态,并且通过保存当前焦点视图的id(所有这些视图都由onRestoreInstanceState()的默认实现恢复)。如果您覆盖此方法以保存每个单独视图未捕获的其他信息,您可能希望调用默认实现[via super.onSaveInstanceState()super.onRestoreInstanceState()],否则请准备好保存所有你自己每个观点的状态。

https://developer.android.com/reference/android/app/Activity.html#onSaveInstanceState(android.os.Bundle)

以及我的答案:

How can I assign an ID to a view programmatically?

答案 1 :(得分:3)

  

我是否需要SharedPreferences对象来保存值,然后重新创建布局

您说您正在onResume()创建这些小部件。您在onResume()中的代码需要知道需要创建哪些小部件。如果这是纯粹的瞬态信息,并且您担心由于屏幕旋转或其他配置更改而导致的活动被销毁和重新创建,请在活动或片段上使用onSaveInstanceState()来传递有关这些小部件的数据。旧活动的新实例。另一方面,如果您担心几个月后能够重新创建这些视图,则需要持久存储此信息:SharedPreferences,数据库,其他一些文件结构,"云& #34;等等。