Androidアプリケーションの bundle
とは何ですか?いつ使うの?
バンドルは通常、さまざまな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()
です。 (ドキュメントの活動ライフサイクルグラフを参照してください。)
Bundle
は、Map
キーを値にマッピングするJavaのString
オブジェクトに非常によく似ています。アクティビティと他のアプリケーションコンポーネントとの間で情報をやり取りするために使用されます。また、フレームワークによって状態情報の取得と復元にも使用されます。
Androidがこのために普通の古いMap
オブジェクトを使用しないのは、Map
は柔軟すぎるからです。シリアル化できないオブジェクト(たとえば、I/Oストリームなど)を含めることができます。 Bundle
APIは、バンドルの内容が直列化可能であることが保証されるようにバンドルに追加できるオブジェクトの種類を制限します。 Androidフレームワークはこのプロパティに依存しています。
私はあなたが アプリケーションの基礎 のドキュメントを読むことを勧めます。これは、とりわけ、バンドルおよびインテントとは何か、またそれらが何のために使用されているのかを説明します。
バンドルを使用して、インテントを使用してアクティビティ間で任意のデータを送信できます。インテントをブロードキャストすると、興味のあるアクティビティ(およびその他のBroadcastRecievers)にこれが通知されます。インテントにバンドルを含めることで、インテントと一緒に追加のデータを送信できます。
バンドルはキーと値のマッピングなので、ハッシュのようなものですが、厳密には単一のString/Fooオブジェクトマッピングに限定されません。特定のデータ型のみが「Parcelable」と見なされ、Bundle 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);
バンドルはアクティビティ間でデータを渡すために使用されます。バンドルを作成し、それを目的のアクティビティから使用できるアクティビティを開始するIntentに渡すことができます。
Bundle: - String値からさまざまな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");
私はこれがあなたに役立つと思います...........
最初の活動:
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());
第二の活動:
String food = getIntent().getExtras().getString("food");
Boolean rb = getIntent().getExtras().getBoolean("rb");
バンドルは、2つの異なるコンポーネント間でデータを転送するだけでなく、さらに重要なことには、アクティビティが破壊される前に保存された値を新しいアクティビティに復元するために使用されます。
EditText
ウィジェットのテキストやListView
のスクロール位置など。