Android保存活动动态创建布局onPause
所以我想暂时保存我的活动布局。我的布局是在LinearLayout中创建的,通过添加像ll.addView(btn);
这样的子项但是当我转到另一个Intent时,并且该Intent完成后,所有添加的按钮消失。我怎样才能防止这一点?Android保存活动动态创建布局onPause
您将必须实施onSaveInstanceState(Bundle)
和onRestoreInstanceState(Bundle)
。
在onSaveInstanceState
中,您存储了在包中动态创建视图所需的信息。
在onRestoreInstanceState
中,您从包中获取此信息并重新创建动态布局。
喜欢的东西:
@Override
public void onSaveInstanceState(Bundle bundle) {
bundle.putString("key", "value"); // use the appropriate 'put' method
// store as much info as you need
super.onSaveInstanceState(bundle);
}
@Override
public void onRestoreInstanceState(Bundle bundle) {
super.onRestoreInstanceState(bundle);
bundle.getString("key"); // again, use the appropriate 'get' method.
// get your stuff
// add views dynamically
}
或者,你可以从onCreate
方法而不是onRestoreInstanceState
方法恢复布局的动态视图。你决定什么是最适合你的。
'onCreate'不是'onRestoreInstanceState'的替代方法。 –
@BirendraSingh它是。从文档:“onCreate()和onRestoreInstanceState()回调方法都会收到包含实例状态信息的相同Bundle。” https://developer.android.com/guide/components/activities/activity-lifecycle.html#saras – 2017-08-31 12:21:58
来自同一页面**不是在'onCreate()'期间恢复状态,你可以选择实现'onRestoreInstanceState() ',*系统在'onStart()'方法之后调用***。如果有人实现了'onStart()'来初始化一些状态变量,逻辑就会中断。 –
要防止每次使用Intent()操作调用Activity时内容始终更新,请转至Manifest文件并向名为`android:launchMode =“singleTask”的活动添加标签。 下面是一个例子
<activity
android:name=".MainActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:label="@string/app_name"
android:launchMode="singleTask"
android:screenOrientation="portrait"
android:theme="@style/AppTheme.TranscluscentBar">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
You can make use of onSaveInstanceState to save the view and
onRestoreInstanceState to retrieve the saved view.
private String someVarB;
...
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString("btn_added", "true");
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
someVarB = savedInstanceState.getString("btn_added");
if(someVarB.equalsIgnoreCase(true))
{
ll.addView(btn);
}
}
为什么ü想要做这样吗? – Rahul
从服务收到数据。当用户选择数据 - >活动显示他们 - >回数据选择 – Berrigan
尽管所有的答案在这里,你应该检查,为什么你的活动重新创建。 – JacksOnF1re