意图和捆绑关系

时间:2011-09-24 08:23:13

标签: android android-intent

使用Intent对象时,我们可以使用putExtra()直接放置不同类型的数据。我们还可以将这些额外数据放入Bundle对象,并将其添加到Intent。那么,如果我们可以直接使用Bundle,我们为什么需要Intent

4 个答案:

答案 0 :(得分:16)

如您所见,Intent在内部将其存储在Bundle中。

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

答案 1 :(得分:8)

有时您只需要将few variablesvalues传递给其他Activity,但如果您有bunch of variable's or values需要传递给其他Activities,该怎么办? 1}}。在这种情况下,您可以使用Bundle并轻松将Bundle传递给所需的Activity。而不是每次都传递单个变量。

答案 2 :(得分:3)

假设您需要将BundleActivity传递到另一个Intent。这就是为什么Bundle允许您将Bundle添加为额外字段的原因。

编辑:例如,如果您想要从数据库传递一行以及其他一些数据,将此行放入Bundle并添加此Intent非常方便} {{1}}作为额外字段。

答案 3 :(得分: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时,内部Intent包并不指向同一个对象,而是使用这样的简单for来创建所有变量的副本:

for (int i=0; i<array.mSize; i++) {
    put(array.keyAt(i), array.valueAt(i));
}