bundle
Androidアプリケーションには何がありますか?いつ使うの?
12 に答える
バンドルは通常、さまざまなAndroidアクティビティ間でデータを渡すために使用されます。渡す値のタイプによって異なりますが、バンドルはすべてのタイプの値を保持し、それらを新しいアクティビティに渡すことができます。
次のように使用できます。
Intent intent = new...
Intent(getApplicationContext(), SecondActivity.class);
intent.putExtra("myKey", AnyValue);
startActivity(intent);
次の手順を実行すると、渡された値を取得できます。
Bundle extras = intent.getExtras();
String tmp = extras.getString("myKey");
あなたはでより多くの情報を見つけることができます:
Bundle
およびIntent
オブジェクトを使用して、アクティビティ間でデータを渡します。
最初にBundle
オブジェクトを作成する
Bundle b = new Bundle();
次に、に保存されている文字列データanystring
をバンドルキーに関連付けます"myname"
b.putString("myname", anystring);
Intent
次に、オブジェクトを作成します
Intent in = new Intent(getApplicationContext(), secondActivity.class);
バンドルオブジェクトb
をインテントに渡します
in.putExtras(b);
2番目のアクティビティを開始します
startActivity(in);
2番目のアクティビティでは、最初のアクティビティから渡されたデータにアクセスする必要があります
Intent in = getIntent();
次に、バンドルからデータを取得する必要があります
Bundle b = in.getExtras();
最後に、名前の付いたキーに関連付けられた文字列データの値を取得します"myname"
String s = b.getString("myname");
バンドルは、将来、データを自分自身に渡すためのアクティビティによって使用されることを付け加えなければなりません。
画面が回転するとき、または別のアクティビティが開始されると、メソッドprotected void onSaveInstanceState(Bundle outState)
が呼び出され、アクティビティが破棄されます。後で、アクティビティの別のインスタンスが作成され、public void onCreate(Bundle savedInstanceState)
呼び出されます。アクティビティの最初のインスタンスが作成されると、バンドルはnullになります。バンドルがnullでない場合、アクティビティは前のバージョンによって開始されたビジネスを継続します。
Androidはテキストをテキストフィールドに自動的に保存しますが、すべてを保存するわけではなく、微妙なバグが表示されることがあります。
ただし、最も一般的なアンチパターンは、onCreate()
初期化だけを行うことを前提としています。それはまた状態を回復しなければならないので、それは間違っています。
この「ローテーション時にアクティビティを再作成する」動作を無効にするオプションがありますが、再起動関連のバグを防ぐことはできず、言及するのが難しくなります。
また、アクティビティが破棄されるときに呼び出しが保証される唯一のメソッドはですonPause()
。(ドキュメントのアクティビティライフサイクルグラフを参照してください。)
更新: Androidに関しては、「バンドル」という用語にはまったく関係のない2つの意味があります。1つは、以下の私の元の回答で詳しく説明されています。もう1つはアプリバンドルです。これは、Androidアプリといくつかの追加のメタデータを含む新しいアーカイブファイル形式(.aapで終わる)です。アプリケーションAPKファイルの代わりにアプリバンドルファイルをアップロードして、GooglePlayを通じてアプリを配布できます。アプリバンドルには、.apkファイルに比べて一定の利点がありますが、他のアプリストア(Amazon App Storeなど)と互換性がない場合があります。これらの利点は、私の元の回答に含まれているドキュメントのリンクに記載されています。
元の答え:
Aは、キーを値にマップBundle
するJavaオブジェクトに非常によく似ています。これは、アクティビティと他のアプリケーションコンポーネント間で情報を渡すために使用されます。また、フレームワークが状態情報をキャプチャして復元するためにも使用されます。Map
String
Map
Androidがこれにプレーンオールドオブジェクトを使用しない理由は、Map
柔軟性が高すぎるためです。シリアル化できないオブジェクト(たとえば、I / Oストリームなど)を含めることができます。Bundle
APIは、バンドルのコンテンツがシリアル化可能であることが保証されるように、バンドルに追加できるオブジェクトのタイプを制限します。Androidフレームワークは、このプロパティに依存しています。
アプリケーションの基礎に関するドキュメントを読むことをお勧めします。これは、とりわけ、バンドルとインテントが何であるか、そしてそれらが何のために使用されるかを説明します。
バンドルを使用して、インテントを介して1つのアクティビティから別のアクティビティに任意のデータを送信できます。インテントをブロードキャストすると、関心のあるアクティビティ(および他のBroadcastRecievers)に通知されます。インテントにはバンドルを含めることができるため、インテントと一緒に追加のデータを送信できます。
バンドルはKey-Valueマッピングであるため、ある意味ではハッシュのようですが、単一のString/Fooオブジェクトマッピングに厳密に制限されているわけではありません。特定のデータ型のみが「パーセル可能」と見なされ、バンドルAPIで明示的に記述されていることに注意してください。
バンドルを作成するだけで、
Bundle simple_bundle=new Bundle();
simple_bundle.putString("item1","value1");
Intent i=new Intent(getApplicationContext(),this_is_the_next_class.class);
i.putExtras(simple_bundle);
startActivity(i);
「this_is_the_next_class.class」で
このようなアイテムを取得できます。
Intent receive_i=getIntent();
Bundle my_bundle_received=receive_i.getExtras();
my_bundle_received.get("item1");
Log.d("Value","--"+my_bundle_received.get("item1").toString);
バンドルは、アクティビティ間でデータを渡すために使用されます。バンドルを作成し、それをインテントに渡すと、アクティビティが開始され、宛先アクティビティから使用できるようになります。
バンドル:-文字列値からさまざまなParcelableタイプへのマッピング。
バンドルは通常、Androidのさまざまなアクティビティ間でデータを渡すために使用されます。
onPause()、onStop()、そして逆の順序でonStop()からonPause()を呼び出す場合。
システムが以前の状態を復元するために使用する保存データは「インスタンス状態」と呼ばれ、Bundleオブジェクトに格納されているキーと値のペアのコレクションです。
バンドルは、アクティビティ間でデータを共有し、アプリの状態をoncreate()メソッドに保存して、アプリが停止した場所を認識できるようにするために使用されます...お役に立てば幸いです:)
バンドルを使用すると、インテントオブジェクトを使用して、あるアクティビティから別のアクティビティにデータを送信できます。バンドルは、任意のタイプのデータを保持します。
次に、2つのアクティビティ間でデータを渡すバンドルを作成する方法を説明します。
ステップ1:最初のアクティビティについて
Bundle b=new Bundle();
b.putString("mkv",anystring);
Intent in=new Intent(getApplicationContext(),secondActivity.class);
in.putExtras(b);
startActivity(in);
ステップ2:2番目のアクティビティについて
Intent in=getIntent();
Bundle b=in.getExtras();
String s=b.getString("mkv");
これはあなたにとって便利だと思います..........。
バンドルは、2つの異なるコンポーネント間でデータを転送するだけでなく、さらに重要なことに、アクティビティが新しいアクティビティに破棄される前に保存された値を復元するために使用されます。
EditText
ウィジェット内のテキストやのスクロール位置などListView
。
最初の活動:
String food = (String)((Spinner)findViewById(R.id.food)).getSelectedItem();
RadioButton rb = (RadioButton) findViewById(R.id.rb);
Intent i = new Intent(this,secondActivity.class);
i.putExtra("food",food);
i.putExtra("rb",rb.isChecked());
2番目のアクティビティ:
String food = getIntent().getExtras().getString("food");
Boolean rb = getIntent().getExtras().getBoolean("rb");