誰の助けを借り、私は知っているすることができますBundle savedInstanceState
にonCreate(Bundle savedInstanceState)
私はAndroidの中で初心者をしています。私はdeveloper.android.comからそれを理解しようとします。しかし、私には理解できません。誰でも簡単にできますか?
誰の助けを借り、私は知っているすることができますBundle savedInstanceState
にonCreate(Bundle savedInstanceState)
私はAndroidの中で初心者をしています。私はdeveloper.android.comからそれを理解しようとします。しかし、私には理解できません。誰でも簡単にできますか?
回答:
アプリケーションの状態をバンドルに保存すると(通常はの非永続的で動的なデータonSaveInstanceState
)、onCreate
アクティビティを再作成する必要がある場合(向きの変更など)に戻すことができるため、以前の状態を失うことがありません。情報。データが提供されなかった場合、savedInstanceState
nullです。
... onPause()メソッドを使用して、永続的なデータ(ユーザーの編集など)をストレージに書き込む必要があります。さらに、onSaveInstanceState(Bundle)メソッドは、アクティビティをこのようなバックグラウンド状態にする前に呼び出されるため、アクティビティ内の動的インスタンス状態を特定のバンドルに保存して、後でアクティビティがonCreate(Bundle)で受信されるようにすることができます。再作成する必要があります。プロセスのライフサイクルが、ホストしているアクティビティにどのように関連付けられているかについての詳細は、「プロセスライフサイクル」セクションを参照してください。永続データはonSaveInstanceState(Bundle)ではなくonPause()に保存することが重要です。後者はライフサイクルコールバックの一部ではないため、ドキュメントで説明されているように、すべての状況で呼び出されるわけではありません。
onCreate(Bundle savedInstanceState)
Bundle
アクティビティが最初に開始されたときにnullが取得され、アクティビティの向きが変更されたときに使用されます.......
http://www.gitshah.com/2011/03/how-to-handle-screen-orientation_28.html
Androidは、これを実現するもう1つのエレガントな方法を提供します。これを実現するには、というメソッドをオーバーライドする必要がありますonSaveInstanceState()
。Androidプラットフォームでは、ユーザーがインスタンスの状態を保存できます。インスタンスの状態はバンドルに保存できます。バンドルは、引数としてonSaveInstanceStateメソッドに渡されます。
保存されたインスタンスの状態を、onCreate
メソッドに引数として渡されたバンドルからロードできます。保存したインスタンスの状態をonRestoreInstanceState
メソッドにロードすることもできます。しかし、読者が理解するためにそれを残しておきます。
savedInstanceState
以前に呼び出されたnull
場合onSavedInstanceState()
は非になります。方向の変更は、これが発生する可能性がある1つの例にすぎません。
Bundle
引数onCreate(Bundle)
がnon- null
ifである場合に限られると思います。これは、向きを変更しているときに発生します...また、OSによって強制終了された後、アクティビティが戻ってきたとき、およびデバイスで他の構成変更をトリガーしたときにも発生します。Activity
onSaveInstanceState
Dhruv Gairolaが答えたように、Bundle savedInstanceStateを使用してアプリケーションの状態を保存できます。私のような新しい学習者が簡単に理解できる非常に単純な例を挙げようとしています。
TextViewとButtonを持つ単純なフラグメントがあるとします。ボタンをクリックするたびに、テキストが変化します。次に、デバイス/エミュレーターの向きを変更し、データを失い(クリックした後に変更されたデータを意味します)、フラグメントが最初から再び開始されることに注意してください。Bundle savedInstanceStateを使用することで、これを取り除くことができます。断片のライフサイクルを調べてみます。フラグメントLifecylceを使用すると、フラグメントが破棄されようとしているときにメソッド「onSaveInstanceState」が呼び出されます。
したがって、状態を保存できるということは、変更されたテキスト値を次のようにそのバンドルに保存します
int counter = 0;
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt("value",counter);
}
オリエンテーションを行った後、「onCreate」メソッドが正しく呼び出されますか?私たちはこれを行うことができます
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(savedInstanceState == null){
//it is the first time the fragment is being called
counter = 0;
}else{
//not the first time so we will check SavedInstanceState bundle
counter = savedInstanceState.getInt("value",0); //here zero is the default value
}
}
今、あなたはオリエンテーションの後にあなたの価値を失うことはありません。変更された値は常に表示されます。
AndroidのonCreate(Bundle savedInstanceState)関数:
1)アクティビティが最初に呼び出されるか起動されると、onCreate(Bundle savedInstanceState)メソッドがアクティビティを作成します。
2)アクティビティの向き(水平から垂直または垂直から水平)が変更されるか、アクティビティがオペレーティングシステムによって強制終了されると、saveedInstanceState、つまりバンドルクラスのオブジェクトがアクティビティの状態を保存します。
3)向きが変更された後、onCreate(Bundle savedInstanceState)がアクティビティを呼び出して再作成し、savedInstanceStateからすべてのデータをロードします。
4)基本的にバンドルクラスは、アプリで上記の条件が発生するたびにアクティビティのデータを格納するために使用されます。
5)アプリではonCreate()は必要ありません。しかし、それがアプリで使用される理由は、そのメソッドが初期化コードを配置するのに最適な場所だからです。
6)onStart()またはonResume()に初期化コードを配置することもできます。アプリが最初にロードされると、onCreate()と同じように機能します。