2017-08-31 3 views
-1

一時的に私のアクティビティレイアウトを保存したいと思います。私のレイアウトは、ll.addView(btn); のような子を追加することによってLinearLayoutで作成されますが、別のインテントに移動してインテントが終了すると、追加されたボタンはすべて消えます。どうすればこれを防ぐことができますか?Androidのアクティビティを保存する動的に作成されたレイアウトonPause

+0

なぜuは次のようにやりたいんですか? – Rahul

+0

データはサービスから受信されます。ユーザーがデータ - >アクティビティを選択して表示 - >データ選択に戻る – Berrigan

+1

ここでのすべての回答にもかかわらず、なぜあなたの活動が再現されているかを確認する必要があります。 – JacksOnF1re

答えて

1

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 –

+0

同じページから** onCreate()の間に状態を復元する代わりに、あなたは 'onRestoreInstanceState() '、*システムが' onStart() 'メソッドの後に呼び出す*。もし誰かが 'onStart()'を実装していくつかの状態変数を初期化すると、ロジックは壊れます。 –

0

Intent()アクションを使用してアクティビティの内容を常に更新するのを防ぐには、マニフェストファイルに移動して、タグを '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(これはランチャアクティビティでもあります)で起動モードが使用されているプロジェクトからこのスニペットをコピーしました。私が説明しているのはアンドロイドです:launchMode = "singleTask" –

+0

ここでは働いていません。 – Berrigan

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

} 
関連する問題