2016-08-03 14 views
0

私はユーザーが写真といくつかのはい/いいえの質問でフォームに記入するアプリケーションを開発しています。 「はい」を選択すると、ダイアログに追加情報を追加する必要があります。次に、この情報はTextViewに挿入され、TextViewLinearLayoutに挿入されます。onRestoreInstanceStateすべてのビューを再読み込みしません

問題は、ユーザーが別のアプリケーションに切り替えると、この画面はバックグラウンドになり、後でアンドロイドによって破棄されます(システムにメモリが必要なため)。その後、ユーザーがアプリケーションに戻ると、onRestoreInstanceState()メソッドが呼び出され、TextViewの中にはLinearLayoutの変数は戻されません。私はこれらの変数を返すためにAndroid注釈を使用しています。これらのAndroidビューを復元するにはどうすればよいですか?

<LinearLayout 
       android:id="@+id/estoque_zerado_pergunta_layout" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:orientation="vertical" 
       android:visibility="visible"> 

       <TextView 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:text="@string/existe_estoque_zerado" 
        android:textSize="@dimen/abc_text_size_large_material" 
        android:layout_margin="5dp"/> 

       <RadioGroup 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:orientation="horizontal"> 

        <RadioButton 
         android:id="@+id/radio_estoque_zerado_sim" 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:text="@string/sim" /> 

        <RadioButton 
         android:id="@+id/radio_estoque_zerado_nao" 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:checked="true" 
         android:text="@string/nao"/> 

       </RadioGroup> 

      </LinearLayout> 

      <LinearLayout 
       android:id="@+id/estoque_zerado_layout" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:orientation="vertical" 
       android:visibility="gone" > 

       <LinearLayout 
        android:id="@+id/estoque_zerado_itens_layout" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:orientation="vertical" > 

        <!--Lista de itens aqui--> 

       </LinearLayout> 

       <LinearLayout 
        android:id="@+id/add_estoque_zerado_item" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:orientation="horizontal" 
        android:padding="5dp" > 

        <ImageView 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:paddingRight="10dp" 
         android:src="@drawable/ic_adicionar" 
         android:contentDescription="@string/adicionar_estoque_zerado"/> 

        <TextView 
         android:layout_width="wrap_content" 
         android:layout_height="match_parent" 
         android:gravity="center_vertical" 
         android:text="@string/adicionar_estoque_zerado" 
         android:textSize="@dimen/abc_text_size_medium_material" /> 

       </LinearLayout> 

      </LinearLayout> 

@Override 
public void onRestoreInstanceState(Bundle savedInstanceState) { 
    super.onRestoreInstanceState(savedInstanceState); 
    Log.d("onRestoreInstanceState", "onRestoreInstanceState: chamou onRestoreInstanceState");} 

    @Override 
public void onSaveInstanceState(Bundle bundle) { 
    super.onSaveInstanceState(bundle); 
    Log.d("onSaveInstanceState", "onSaveInstanceState: chamou onSaveInstanceState");} 

私の初心者の英語には申し訳ありません。 ありがとうございます。

+0

あなたは 'アンドロイドを持っている:あなたのレイアウト上の視界' = "ゴーン" という通常のでしょうか? –

+0

これは前提条件です。各質問は、前回の回答があった後でなければなりません。 –

+0

linearLayoutが復元されていないことを確認できますか?(例:[階層表示](https://developer.android.com/studio/profile/hierarchy-viewer.html)を使用) –

答えて

0

でそれらを取得することができます

static final String SAVE_STRING = "string_to_save"; 
... 
@Override 
public void onSaveInstanceState(Bundle savedInstanceState) { 
    // Save variable value on bundle 
    savedInstanceState.putInt(SAVE_STRING, yourstring); 

    // Always call the superclass so it can save the view hierarchy state 
    super.onSaveInstanceState(savedInstanceState); 
} 

あなたのデータを保存します。 onCreateonRestoreInstanceStateは同じBundleを使用しているため、ビューを初期化し、onCreatesavedInstanceStateをチェックしてください。以下のドキュメントをチェックしてください。

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

https://developer.android.com/training/basics/activity-lifecycle/recreating.html#RestoreState

+0

"このメソッドの既定の実装では、以前にonSaveInstanceState(Bundle)で凍結されたビューステートの復元が実行されます。"これは、あなたが私に与えた最初のリンクで、abou onRestoreInstanceStateです。 同じページから: "IDを持つ階層内の各ビューでonSaveInstanceState()を呼び出し、現在フォーカスされているビューのIDを保存することで、ほとんどのUIインスタンスごとの状態が処理されます(これらはすべて、onRestoreInstanceState(Bundle)のデフォルト実装によって復元されます)。これはonSaveInstanceStateに関するものです。 –

+0

ポイントは、いくつかのビューが復元され、テキストビューの内部の線形レイアウトだけが復元されないということです。 –

+1

いくつかの状況をテストした後、onRestoreInstanceStateのコードをonCreateに変更すると、textview'sが現在復元されます。ありがとう。 –

0

https://developer.android.com/training/basics/activity-lifecycle/recreating.html

に基づいて、あなたが戻って取得したい変数を保存する必要があります。 onSaveInstanceStateで 私はonRestoreInstanceStateは、あなたの意見を復元しません知っているように、あなたはonRestoreInstanceState

public void onRestoreInstanceState(Bundle savedInstanceState) { 
    // Always call the superclass so it can restore the view hierarchy 
    super.onRestoreInstanceState(savedInstanceState); 

    // Restore state members from saved instance 
    yourstring = savedInstanceState.getInt(SAVE_STRING); 
} 
+0

私は必要なすべての変数を保存しますが、問題はtextviewの内部の線形レイアウトです。 –

+0

あなたは2番目のLinearLayoutでandroid:visibility = "gone"を持っていますか? –

関連する問題