293

bundleAndroidアプリケーションには何がありますか?いつ使うの?

4

12 に答える 12

297

バンドルは通常、さまざまなAndroidアクティビティ間でデータを渡すために使用されます。渡す値のタイプによって異なりますが、バンドルはすべてのタイプの値を保持し、それらを新しいアクティビティに渡すことができます。

次のように使用できます。

Intent intent = new...
Intent(getApplicationContext(), SecondActivity.class);
intent.putExtra("myKey", AnyValue);  
startActivity(intent);

次の手順を実行すると、渡された値を取得できます。

Bundle extras = intent.getExtras(); 
String tmp = extras.getString("myKey");

あなたはでより多くの情報を見つけることができます:

于 2011-02-15T05:01:44.470 に答える
93

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");
于 2012-08-12T17:14:14.450 に答える
72

バンドルは、将来、データを自分自身に渡すためのアクティビティによって使用されることを付け加えなければなりません。

画面が回転するとき、または別のアクティビティが開始されると、メソッドprotected void onSaveInstanceState(Bundle outState)が呼び出され、アクティビティが破棄されます。後で、アクティビティの別のインスタンスが作成され、public void onCreate(Bundle savedInstanceState)呼び出されます。アクティビティの最初のインスタンスが作成されると、バンドルはnullになります。バンドルがnullでない場合、アクティビティは前のバージョンによって開始されたビジネスを継続します。

Androidはテキストをテキストフィールドに自動的に保存しますが、すべてを保存するわけではなく、微妙なバグが表示されることがあります。

ただし、最も一般的なアンチパターンは、onCreate()初期化だけを行うことを前提としています。それはまた状態を回復しなければならないので、それは間違っています。

この「ローテーション時にアクティビティを再作成する」動作を無効にするオプションがありますが、再起動関連のバグを防ぐことはできず、言及するのが難しくなります。

また、アクティビティが破棄されるときに呼び出しが保証される唯一のメソッドはですonPause()。(ドキュメントのアクティビティライフサイクルグラフを参照してください。)

于 2012-05-31T12:24:38.323 に答える
60

更新: Androidに関しては、「バンドル」という用語にはまったく関係のない2つの意味があります。1つは、以下の私の元の回答で詳しく説明されています。もう1つはアプリバンドルです。これは、Androidアプリといくつかの追加のメタデータを含む新しいアーカイブファイル形式(.aapで終わる)です。アプリケーションAPKファイルの代わりにアプリバンドルファイルをアップロードして、GooglePlayを通じてアプリを配布できます。アプリバンドルには、.apkファイルに比べて一定の利点がありますが、他のアプリストア(Amazon App Storeなど)と互換性がない場合があります。これらの利点は、私の元の回答に含まれているドキュメントのリンクに記載されています。

元の答え:

Aは、キーを値にマップBundleするJavaオブジェクトに非常によく似ています。これは、アクティビティと他のアプリケーションコンポーネント間で情報を渡すために使用されます。また、フレームワークが状態情報をキャプチャして復元するためにも使用されます。MapString

MapAndroidがこれにプレーンオールドオブジェクトを使用しない理由は、Map柔軟性が高すぎるためです。シリアル化できないオブジェクト(たとえば、I / Oストリームなど)を含めることができます。BundleAPIは、バンドルのコンテンツがシリアル化可能であることが保証されるように、バンドルに追加できるオブジェクトのタイプを制限します。Androidフレームワークは、このプロパティに依存しています。

アプリケーションの基礎に関するドキュメントを読むことをお勧めします。これは、とりわけ、バンドルとインテントが何であるか、そしてそれらが何のために使用されるかを説明します。

于 2011-02-15T05:00:20.120 に答える
15

バンドルを使用して、インテントを介して1つのアクティビティから別のアクティビティに任意のデータを送信できます。インテントをブロードキャストすると、関心のあるアクティビティ(および他のBroadcastRecievers)に通知されます。インテントにはバンドルを含めることができるため、インテントと一緒に追加のデータを送信できます。

バンドルはKey-Valueマッピングであるため、ある意味ではハッシュのようですが、単一のString/Fooオブジェクトマッピングに厳密に制限されているわけではありません。特定のデータ型のみが「パーセル可能」と見なされ、バンドルAPIで明示的に記述されていることに注意してください。

于 2011-02-15T04:57:20.587 に答える
8

バンドルを作成するだけで、


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);
于 2014-02-11T12:07:22.670 に答える
5

バンドルは、アクティビティ間でデータを渡すために使用されます。バンドルを作成し、それをインテントに渡すと、アクティビティが開始され、宛先アクティビティから使用できるようになります。

于 2011-02-15T04:55:08.397 に答える
3

バンドル:-文字列値からさまざまなParcelableタイプへのマッピング。

バンドルは通常、Androidのさまざまなアクティビティ間でデータを渡すために使用されます。

onPause()、onStop()、そして逆の順序でonStop()からonPause()を呼び出す場合。

システムが以前の状態を復元するために使用する保存データは「インスタンス状態」と呼ばれ、Bundleオブジェクトに格納されているキーと値のペアのコレクションです。

于 2015-08-16T17:26:38.613 に答える
2

バンドルは、アクティビティ間でデータを共有し、アプリの状態をoncreate()メソッドに保存して、アプリが停止した場所を認識できるようにするために使用されます...お役に立てば幸いです:)

于 2013-07-29T10:52:32.467 に答える
0

バンドルを使用すると、インテントオブジェクトを使用して、あるアクティビティから別のアクティビティにデータを送信できます。バンドルは、任意のタイプのデータを保持します。

次に、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");

これはあなたにとって便利だと思います..........。

于 2015-04-09T10:04:39.463 に答える
0

バンドルは、2つの異なるコンポーネント間でデータを転送するだけでなく、さらに重要なことに、アクティビティが新しいアクティビティに破棄される前に保存された値を復元するために使用されます。

EditTextウィジェット内のテキストやのスクロール位置などListView

于 2015-06-18T15:36:22.670 に答える
0

最初の活動:

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");
于 2016-12-21T20:49:37.643 に答える