Android保存活动动态创建布局onPause

问题描述:

所以我想暂时保存我的活动布局。我的布局是在LinearLayout中创建的,通过添加像ll.addView(btn); 这样的子项但是当我转到另一个Intent时,并且该Intent完成后,所有添加的按钮消失。我怎样才能防止这一点?Android保存活动动态创建布局onPause

+0

为什么ü想要做这样吗? – Rahul

+0

从服务收到数据。当用户选择数据 - >活动显示他们 - >回数据选择 – Berrigan

+1

尽管所有的答案在这里,你应该检查,为什么你的活动重新创建。 – JacksOnF1re

您将必须实施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方法恢复布局的动态视图。你决定什么是最适合你的。

+0

'onCreate'不是'onRestoreInstanceState'的替代方法。 –

+0

@BirendraSingh它是。从文档:“onCreate()和onRestoreInstanceState()回调方法都会收到包含实例状态信息的相同Bundle。” https://developer.android.com/guide/components/activities/activity-lifecycle.html#saras – 2017-08-31 12:21:58

+0

来自同一页面**不是在'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> 
+0

这将为活动创建另一个启动器,据我所知 – Berrigan

+0

不,我从我的项目中复制此代码段,其中启动模式用于我的MainActivity(这也是启动器活动)。我正在解释的是android:launchMode =“singleTask” –

+0

这里不工作。 – Berrigan

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); 
    } 

}