14

私はAndroidアプリケーション開発に不慣れで、バンドルが実際に何をするのか理解できません。

誰かが私のためにそれを説明できますか?

4

7 に答える 7

23

私はAndroidアプリケーション開発に不慣れで、バンドルが実際に何をするのか理解できません。誰かが私のためにそれを説明できますか?

私自身の言葉で言えば、プリミティブ データ型オブジェクトを対としてMAP格納する のようにイメージできます。key-value

Bundleさまざまな を介してデータを渡すために最もよく使用されActivitiesます。そこからデータを格納および取得するための提供putType()とメソッド。getType()

また、Activity のライフサイクル メソッドのBundleパラメーターとしてonCreate()、デバイスの向きが変更されたときにデータを保存する場合に使用できます (この場合、Activity は破棄され、null 以外のパラメーターを Bundle として再作成されます)。

Bundleそのメソッドの詳細については、reference at developer.android.comどこから始めるべきかを読んでから、いくつかのデモ アプリケーションを作成して経験を積むことができます。

使用例のデモンストレーション:

アクティビティを介してプリミティブ データ型を渡す:

Intent i = new Intent(ActivityContext, TargetActivity.class);
Bundle dataMap = new Bundle();
dataMap.putString("key", "value");
dataMap.putInt("key", 1);
i.putExtras(dataMap);
startActivity(i);

アクティビティを介して値のリストを渡す:

Bundle dataMap = new Bundle();
ArrayList<String> s = new ArrayList<String>();
s.add("Hello");
dataMap.putStringArrayList("key", s); // also Integer and CharSequence
i.putExtras(dataMap);
startActivity(i);

アクティビティを介してシリアル化されたオブジェクトを渡す:

public class Foo implements Serializable {

   private static final long serialVersionUID = 1L;

   private ArrayList<FooObject> foos;

   public Foo(ArrayList<FooObject> foos) {
      this.foos = foos;
   }

   public ArrayList<FooObject> getFoos() {
      return this.foos;
   }        
}


public class FooObject implements Serializable {

   private static final long serialVersionUID = 1L;

   private int id;

   public FooObject(int id) {
      this.id = id;
   }

   public int getId() {
      return id;
   }

   public void setId(int id) {
      this.id = id;
   }
}

それで:

Bundle dataMap = new Bundle();
ArrayList<FooObject> foos = new ArrayList<FooObject>();
foos.add(new FooObject(1));
dataMap.putSerializable("key", new Foo(foos));


アクティビティを介して Parcelable オブジェクトを渡します。

より多くのコードがあるため、これを行う方法の記事を次に示します。


ターゲット アクティビティでデータを取得する方法:

魔法のメソッドが 1 つありgetIntent()ます。Intent (拡張データを含むデータもある場合) を返し、そこから Activity を開始したメソッドが呼び出されます。

そう:

Bundle dataFromIntent = getIntent().getExtras();
if (dataFromIntent != null) {
   String stringValue = dataFromIntent.getString("key");
   int intValue = dataFromIntent.getInt("key");
   Foo fooObject = (Foo) dataFromIntent.getSerializable("key");
   // getSerializble returns Serializable so we need to cast to appropriate object.
   ArrayList<String> stringArray = dataFromIntent.getStringArrayList("key");
}


メソッドのパラメーターとしての Bundle の使用onCreate()法:

onSaveInstanceState()以下のようにメソッドにデータを保存しています:

@Override
public void onSaveInstanceState(Bundle map) {
   map.putString("key", "value");
   map.putInt("key", 1);
}

以下のように、メソッドでそれらを復元しますonCreate()(この場合はBundlenull ではないパラメーターとして)。

@Override
public void onCreate(Bundle savedInstanceState) {
   if (savedInstanceState != null) {
      String stringValue = savedInstanceState.getString("key");
      int intValue = savedInstanceState.getString("key");
   }
   ...
}

注:メソッドでもデータを復元できますが、onRestoreInstanceState()一般的ではありません (onStart()メソッドの後にonCreate()呼び出され、前に呼び出されます)。

于 2013-02-18T12:53:57.040 に答える
8

一般的な英語では、「それは、まとめられた、またはまとめられた、物の集まり、または大量の素材です。」

Androidでも同じように、「キーとその値のコレクションであり、ある種のデータを格納するために使用されます。」

于 2013-02-18T12:51:13.117 に答える
4

バンドルは通常、さまざまなコンポーネント間でデータを渡すために使用されます。getExtras() メソッドを介してインテントから取得できるバンドル クラス。

また、Intent オブジェクトのオーバーロードされた putExtra() メソッドを介して Bundle に直接データを追加することもできます。Extras はキーと値のペアで、キーは常に String 型です。値として、プリミティブ データ型を使用できます。

受信コンポーネントは、Intent オブジェクトの getAction() および getData() メソッドを介してこの情報にアクセスできます。この Intent オブジェクトは getIntent() メソッドで取得できます。インテントを受け取ったコンポーネントは、getIntent().getExtras() メソッド呼び出しを使用して追加データを取得できます。

主な活動

Intent intent = new Intent(MainActivity.this,SecondActivity.class);

Bundle bundle = new Bundle();

bundle.putString(“Key“, myValue);

intent.putExtras(bundle);

startActivity(intent);

セカンドアクティビティ

Bundle bundle = getIntent().getExtras();

String myValue= bundle.getString(“key“);
于 2014-02-04T18:21:28.823 に答える
3

まとめられた、またはまとめられた物の集まり、または一定量の素材。それは辞書の意味です...同じバンドルはデータのコレクションです。データは、String、int、float、boolean、およびシリアル化可能なデータなど、任意のタイプにすることができます。バンドルBundleを使用して、あるアクティビティのデータを別のアクティビティに共有および保存できます。

于 2013-02-18T12:51:26.713 に答える
2

あるアクティビティから別のアクティビティにデータを渡すときに使用される、データのバンドルと考えてください。

ドキュメントでは次のように定義されています

「文字列値からさまざまな Parcelable 型へのマッピング。」

バンドル内にデータを配置し、このバンドルを複数のアクティビティに渡すことができます。個々のデータを渡す必要がないため、これは便利です。データを個別に送信するのではなく、すべてのデータを Bundle に入れ、Bundle を渡すだけです。

于 2013-02-18T12:48:15.847 に答える
1

それは文字通り物事の束です。情報: そこに何か (文字列、整数など) を入れ、たとえばインテントを使用するときにそれらを単一のパラメーター (バンドル) として渡します。

次に、ターゲット (アクティビティ) がそれらを再び取得し、ID、モード、設定などを読み取ることができます。

于 2013-02-18T12:48:01.460 に答える
1

String 値からさまざまな Parcelable 型へのマッピング。ここをクリック

例:

Intent mIntent = new Intent(this, Example.class);
Bundle mBundle = new Bundle();
mBundle.extras.putString(key, value);
mIntent.putExtras(mBundle);

あるアクティビティから別のアクティビティに値を送信します。

于 2013-02-18T12:50:15.033 に答える