2016-10-20 9 views
0

をdestoyed&作成したばかりにも活性を保持して取得:なぜUI状態がUI状態が再び作成&をdestoyed取得しても活性を保持して取得なぜ再び

私の活動はのEditTextを持っており、私はそれにいくつかのテキストを書く場合など。 ABCと私はそれをonDestroyを呼び出すとonCreate()ので、Edittext 空である必要がありますが、まだ古いテキストを持っているそれを回転させる。

My活動:オリエンテーション変動に関する

public class MainActivity extends ActionBarActivity { 


    protected void onCreate(Bundle savedInstanceState) { 
     debugLog("(++) Create called"); 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    } 

    @Override 
    protected void onResume() { 
     debugLog("(++) onResume called"); 
     super.onResume(); 
    } 

    @Override 
    protected void onPause() { 
     debugLog("(++) onPause called"); 
     super.onPause(); 
    } 

    @Override 
    protected void onDestroy() { 
     debugLog("(++) onDestroy called"); 
     super.onDestroy(); 
    } 

    private void debugLog(String str) { 
     Log.d("SAMPLE APP",str); 
    } 
} 

XML

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="${relativePackage}.${activityClass}" 
    android:orientation="vertical" 
    android:padding="15dp"> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Name: " 
     android:singleLine="true" 
     android:textSize="16sp" 
     android:textColor="#000000" /> 

    <EditText 
     android:id="@+id/et_name" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="10dp" 
     /> 
    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Hobbies:" 
     android:singleLine="true" 
     android:textSize="16sp" 
     android:textColor="#000000" 
     android:layout_marginTop="10dp"/> 

    <CheckBox 
     android:id="@+id/checkBox1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" 
     android:text="Table Tennis" 
     android:layout_marginTop="10dp"/> 

</LinearLayout> 

Logcat:

(++) onDestroy called 
(++) onPause called 
(++) onCreate called 
(++) onResume called 

答えて

3

デフォルトでは、システムはBundleインスタンスの状態を使用して、アクティビティレイアウト内の各Viewオブジェクトに関する情報(EditTextオブジェクトに入力されたテキスト値など)を保存します。したがって、アクティビティインスタンスが破棄されて再作成された場合、レイアウトの状態はコードが不要な以前の状態に戻ります。ただし、アクティビティの進行状況を追跡するメンバー変数など、リストアしたい状態情報がさらに多くある場合があります。

注:id属性:あなたの活動の ビューの状態を復元するには、Androidシステムのためには、各ビューは アンドロイドによって提供される固有のIDを持っている必要があります。

アクティビティの状態に関する追加データを保存するには、onSaveInstanceState()コールバックメソッドをオーバーライドする必要があります。このメソッドは、ユーザーがあなたのアクティビティを離れるときに呼び出され、予期せずアクティビティが破棄された場合に保存されるBundleオブジェクトを渡します。後でアクティビティインスタンスを再作成する必要がある場合は、同じBundleオブジェクトをonRestoreInstanceState()メソッドとonCreate()メソッドの両方に渡します。

+0

これで、UIの状態を失う心配はありません。例えば、edittextやcheckboxの状態のテキストや、onPauseに保存する必要はありません。 –

+0

これは、アンドロイドシステムがアクティビティを再作成していれば復元されますandroid:id属性を指定しました。しかし、それを自分で終わらせたり、他の活動に行くなら、そのデータを保存しなければなりません。 – abhishesh

2

Androidが長いとしてのEditTextのようなデフォルトのウィジェットのいくつかのコンテンツを保存していますそれはIDを持っているので。

+0

あなたの答えをサポートする文書を共有できますか...保存状態が実装されているEditText.javaで何も見つかりませんでした –

+0

@abhisheshは私よりも詳細な答えを持っています。 – Dawars

関連する問題