使用Intent对象时,我们可以使用putExtra()
直接放置不同类型的数据。我们还可以将这些额外数据放入Bundle
对象,并将其添加到Intent
。那么,如果我们可以直接使用Bundle
,我们为什么需要Intent
?
答案 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 variables
或values
传递给其他Activity
,但如果您有bunch of variable's or values
需要传递给其他Activities
,该怎么办? 1}}。在这种情况下,您可以使用Bundle
并轻松将Bundle
传递给所需的Activity
。而不是每次都传递单个变量。
答案 2 :(得分:3)
假设您需要将Bundle
从Activity
传递到另一个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));
}