web-dev-qa-db-ja.com

onCreate(Bundle savedInstanceState)とは

誰でも私がonCreate(Bundle savedInstanceState)Bundle savedInstanceStateについて知るのを手伝ってもらえますか?私はAndroidの初心者です。 developer.Android.comから理解しようとしています。しかし、私には理解できません。誰でも簡単にできますか?

112
user1077015

アプリケーションの状態をバンドル(通常、onSaveInstanceStateの非永続動的データ)に保存すると、失われないようにアクティビティを再作成する必要がある場合(向きの変更など)にonCreateに戻すことができますこの事前情報。データが提供されなかった場合、savedInstanceStateはnullです。

... onPause()メソッドを使用して、永続的なデータ(ユーザー編集など)をストレージに書き込む必要があります。さらに、onSaveInstanceState(Bundle)メソッドは、アクティビティをそのようなバックグラウンド状態にする前に呼び出されます。これにより、アクティビティ内の動的インスタンス状態を指定されたBundleに保存し、アクティビティがonCreate(Bundle)再作成する必要があります。プロセスのライフサイクルがホストしているアクティビティにどのように結び付けられているかについて詳しくは、プロセスのライフサイクルのセクションをご覧ください。 onSaveInstanceState(Bundle)はライフサイクルコールバックの一部ではないため、onSaveInstanceState(Bundle)ではなくonPause()に永続データを保存することが重要であることに注意してください。

ソース

100
Dhruv Gairola

onCreate(Bundle savedInstanceState)は、アクティビティ取得が最初に開始されたときにBundle nullを取得し、アクティビティの方向が変更されたときに使用されます.......

http://www.gitshah.com/2011/03/how-to-handle-screen-orientation_28.html

Androidは、これを実現する別のエレガントな方法を提供します。これを実現するには、onSaveInstanceState()というメソッドをオーバーライドする必要があります。 Androidプラットフォームでは、ユーザーはインスタンスの状態を保存できます。インスタンスの状態はバンドルに保存できます。バンドルは引数としてonSaveInstanceStateメソッドに渡されます。

onCreateメソッドに引数として渡されたバンドルから保存されたインスタンス状態をロードできます。保存したインスタンスの状態をonRestoreInstanceStateメソッドで読み込むこともできます。しかし、読者が理解できるようにそれを残しておきます。

16
Dheeresh Singh

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
    }
}

これで、オリエンテーション後に価値を失うことはありません。変更された値は常に表示されます。

11
Asad

onCreate(Bundle)は、アクティビティが最初に起動したときに呼び出されます。これを使用して、ユーザーインターフェイスの作成など、1回限りの初期化を実行できます。 onCreate()は、nullまたはonSaveInstanceStateによって以前に保存された状態情報のいずれかであるパラメーターを1つ取ります。

4
user1619310

onCreate(Bundle savedInstanceState)Androidの関数:

1)アクティビティが最初に呼び出されるか起動されると、onCreate(Bundle savedInstanceState)メソッドがアクティビティを作成します。

2)アクティビティの方向(水平から垂直または垂直から水平)が変更された場合、またはアクティビティがオペレーティングシステムによって強制的に終了された場合、savedInstanceState、つまりバンドルクラスのオブジェクトはアクティビティの状態を保存します.

3)Orientationが変更された後、onCreate(Bundle savedInstanceState)はアクティビティを呼び出して再作成し、savedInstanceStateからすべてのデータをロードします。

4)基本的にバンドルクラスは、アプリで上記の条件が発生するたびにアクティビティのデータを保存するために使用されます。

5)アプリにはonCreate()は必要ありません。しかし、アプリで使用される理由は、そのメソッドが初期化コードを置くのに最適な場所だからです。

6)onStart()またはonResume()に初期化コードを配置することもできます。アプリが最初にロードされるとき、onCreate()と同じように機能します。

3
Abhi

onCreate(Bundle savedInstanceState)が呼び出され、上記のシナリオ(ビジュアルビュー)でアクティビティが終了した場合、savedInstanceStateはnull以外になります。その後、アプリはsavedInstanceStateからデータを取得(キャッチ)し、アクティビティを再生成できます

0
kabilan