2011-09-24 21 views
10

インテントオブジェクトを使用しているときに、putExtra()を使用してさまざまな種類のデータを直接入れることができます。これらの余分なデータをBundleオブジェクトに入れてIntentに追加することもできます。 Intentを直接使用すると、なぜBundleが必要なのですか?インテントとバンドルの関係

答えて

7

時々、あなたは、いくつかの他のActivityにのみfew variablesまたはvaluesに合格する必要がありますが、あなたは、様々なActivitiesに渡す必要bunch of variable's or valuesを持っているものならば。その場合、Bundleを使用し、Bundleを必要なActivityに簡単に渡すことができます。毎回単一の変数を渡す代わりに。

+1

申し訳ありませんが、これは間違っています、なぜ私の答えを確認してください。 – Reno

+0

'mExtras = new Bundle();'これは十分説得力がありませんか?動かない場合は、Intent.javaのソースコードを自分でチェックしてください。 – Reno

3

BundleActivityから別のものに渡す必要があるとします。そのため、Intentは、追加フィールドとしてBundleを追加することができます。

EDIT:たとえば、あなたはそれがBundleにこの行を入れて、余分なフィールドとしてIntentにこのBundleを追加するために非常に便利ですいくつかの他のデータと一緒にデータベースから行を渡したい場合。

+0

私はなぜ尋ねていますか?私たちは同じ余分なデータをバンドルに入れ、そのバンドルをインテントオブジェクトに追加します。インテントオブジェクトに直接入れることができます。そうではありませんか? –

+0

そうではありません。あなたはあなたが渡す必要がある 'Bundle'を持つことができます。あなたは本当にそれをフィールドごとに 'Intent'にコピーしますか?そして、 'Bundle'と' Intent'のキーが重なるとしたら?人々が行うことのすべてを知ることができないので、あなたは 'Intund'に' Bundle'を置くことができることを覚えておいてください。あなたがそれを必要とするときに、何をすべきかを知るでしょう。 – Michael

+0

ちょっとした例:他のデータと一緒にデータベースから行を渡したいとします。この行を 'Bundle'に格納するのは非常に便利です。私のアプリケーションの一つでは、データベースからいくつかの行を渡すために 'Bundle'のリストを使用します。 – Michael

15

ご覧のとおり、Intentは内部でBundleに保存しています。

public Intent putExtra(String name, String value) { 
    if (mExtras == null) { 
     mExtras = new Bundle(); 
    } 
    mExtras.putString(name, value); 
    return this; 
} 
1

私は@Lalitが何を意味するのかを推測は、あなたの活動は常に異なる意図に同じ変数を渡し想定され、あなたのクラスの単一Bundleでそれらのすべてを保存することができますし、単にあなたがの同じセットを必要なときintent.putExtras(mBundle)を使用しますパラメーター。

たとえば、パラメータのいずれかがコードで廃止されると、コードを変更しやすくなります。同様に:

public class MyActivity { 
    private Bundle mBundle; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     mBundle = new Bundle(); 
     mBundle.putString("parameter1", value1); 
     mBundle.putString("parameter2", value2); 
    } 
    private void openFirstActivity() { 
     Intent intent = new Intent(this, FirstActivity.class); 
     intent.putExtras(mBundle); 
     startActivity(intent); 
    } 
    private void openSecondActivity() { 
     Intent intent = new Intent(this, SecondActivity.class); 
     intent.putExtras(mBundle); 
     startActivity(intent); 
    } 
} 

OBS:すでに述べたように、Intent店舗内部Bundleのパラメータ、そしてそれはあなたがputExtrasを呼び出すときに、内部テントバンドルが同じオブジェクトを指していないことは注目に値しますが、次のような単純なforを使用して、すべての変数のコピーを作成します。

for (int i=0; i<array.mSize; i++) { 
    put(array.keyAt(i), array.valueAt(i)); 
} 
関連する問題