誰でも私がonCreate(Bundle savedInstanceState)
のBundle savedInstanceState
について知るのを手伝ってもらえますか?私はAndroidの初心者です。 developer.Android.comから理解しようとしています。しかし、私には理解できません。誰でも簡単にできますか?
アプリケーションの状態をバンドル(通常、onSaveInstanceState
の非永続動的データ)に保存すると、失われないようにアクティビティを再作成する必要がある場合(向きの変更など)にonCreate
に戻すことができますこの事前情報。データが提供されなかった場合、savedInstanceState
はnullです。
... onPause()メソッドを使用して、永続的なデータ(ユーザー編集など)をストレージに書き込む必要があります。さらに、onSaveInstanceState(Bundle)メソッドは、アクティビティをそのようなバックグラウンド状態にする前に呼び出されます。これにより、アクティビティ内の動的インスタンス状態を指定されたBundleに保存し、アクティビティがonCreate(Bundle)再作成する必要があります。プロセスのライフサイクルがホストしているアクティビティにどのように結び付けられているかについて詳しくは、プロセスのライフサイクルのセクションをご覧ください。 onSaveInstanceState(Bundle)はライフサイクルコールバックの一部ではないため、onSaveInstanceState(Bundle)ではなくonPause()に永続データを保存することが重要であることに注意してください。
onCreate(Bundle savedInstanceState)
は、アクティビティ取得が最初に開始されたときにBundle
nullを取得し、アクティビティの方向が変更されたときに使用されます.......
http://www.gitshah.com/2011/03/how-to-handle-screen-orientation_28.html
Androidは、これを実現する別のエレガントな方法を提供します。これを実現するには、onSaveInstanceState()
というメソッドをオーバーライドする必要があります。 Androidプラットフォームでは、ユーザーはインスタンスの状態を保存できます。インスタンスの状態はバンドルに保存できます。バンドルは引数としてonSaveInstanceStateメソッドに渡されます。
onCreate
メソッドに引数として渡されたバンドルから保存されたインスタンス状態をロードできます。保存したインスタンスの状態をonRestoreInstanceState
メソッドで読み込むこともできます。しかし、読者が理解できるようにそれを残しておきます。
Dhruv Gairolaが答えたように、Bundle savedInstanceStateを使用してアプリケーションの状態を保存できます。私のような新しい学習者が簡単に理解できる非常に簡単な例を挙げようとしています。
TextViewとButtonを持つ単純なフラグメントがあるとします。ボタンをクリックするたびに、テキストが変わります。次に、デバイス/エミュレータの向きを変更し、データを失ったことに注意してください(クリックした後に変更されたデータを意味します)。 Bundle savedInstanceStateを使用することで、これを取り除くことができます。フラグメントのライフサイクルを見ると、 Fragment 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
}
}
これで、オリエンテーション後に価値を失うことはありません。変更された値は常に表示されます。
onCreate(Bundle)
は、アクティビティが最初に起動したときに呼び出されます。これを使用して、ユーザーインターフェイスの作成など、1回限りの初期化を実行できます。 onCreate()
は、nullまたはonSaveInstanceState
によって以前に保存された状態情報のいずれかであるパラメーターを1つ取ります。
onCreate(Bundle savedInstanceState)Androidの関数:
1)アクティビティが最初に呼び出されるか起動されると、onCreate(Bundle savedInstanceState)メソッドがアクティビティを作成します。
2)アクティビティの方向(水平から垂直または垂直から水平)が変更された場合、またはアクティビティがオペレーティングシステムによって強制的に終了された場合、savedInstanceState、つまりバンドルクラスのオブジェクトはアクティビティの状態を保存します.
3)Orientationが変更された後、onCreate(Bundle savedInstanceState)はアクティビティを呼び出して再作成し、savedInstanceStateからすべてのデータをロードします。
4)基本的にバンドルクラスは、アプリで上記の条件が発生するたびにアクティビティのデータを保存するために使用されます。
5)アプリにはonCreate()は必要ありません。しかし、アプリで使用される理由は、そのメソッドが初期化コードを置くのに最適な場所だからです。
6)onStart()またはonResume()に初期化コードを配置することもできます。アプリが最初にロードされるとき、onCreate()と同じように機能します。
onCreate(Bundle savedInstanceState)が呼び出され、上記のシナリオ(ビジュアルビュー)でアクティビティが終了した場合、savedInstanceStateはnull以外になります。その後、アプリはsavedInstanceStateからデータを取得(キャッチ)し、アクティビティを再生成できます