意图和捆绑关系

在使用Intent对象时,我们可以直接使用putExtra()来放置不同types的数据。 我们也可以把这些额外的数据放到一个Bundle对象中,并将它添加到Intent 。 那么为什么我们需要Bundle如果我们可以直接使用Intent呢?

Solutions Collecting From Web of "意图和捆绑关系"

有时你只需要将few variablesvalues传递给其他Activity ,但是如果你有bunch of variable's or values需要传递给各种Activities bunch of variable's or values 。 在这种情况下,您可以使用Bundle并轻松地将Bundle传递到所需的Activity 。 而不是每次都传递单个variables。

如您所见, Intent将其内部存储在一个Bundle

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

假设您需要将一个Bundle从一个Activity传递到另一个。 这就是为什么Intent允许你添加Bundle作为额外的领域。

编辑 :例如,如果你想从数据库中传递一行以及其他一些数据,将这行放入一个Bundle并将这个Bundle作为额外的字段添加到Intent是非常方便的。

我想@Lalit的意思是假设你的活动总是把相同的variables传递给不同的意图,你可以把它们全部存储在你的类的一个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 bundle不会指向同一个对象,而是创build一个所有variables的副本,像这样:

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