Android 意向与捆绑关系
在使用Intent对象时,我们可以使用其Android 意向与捆绑关系,android,android-intent,Android,Android Intent,在使用Intent对象时,我们可以使用其putExtra()直接放置不同类型的数据。我们还可以将这些额外的数据放入一个Bundle对象中,并将其添加到Intent中。那么,如果我们可以直接使用Intent来实现,为什么我们需要Bundle呢?假设您需要将Bundle从一个活动传递到另一个活动。这就是为什么Intent允许您添加Bundles作为额外字段的原因 编辑:例如,如果您想将数据库中的一行与其他一些数据一起传递,可以非常方便地将该行放入捆绑包,并将该捆绑包添加到意图中作为一个额外字段。有时
putExtra()
直接放置不同类型的数据。我们还可以将这些额外的数据放入一个Bundle
对象中,并将其添加到Intent
中。那么,如果我们可以直接使用Intent
来实现,为什么我们需要Bundle
呢?假设您需要将Bundle
从一个活动传递到另一个活动。这就是为什么Intent
允许您添加Bundle
s作为额外字段的原因
编辑:例如,如果您想将数据库中的一行与其他一些数据一起传递,可以非常方便地将该行放入捆绑包
,并将该捆绑包
添加到意图
中作为一个额外字段。有时您只需要将几个变量
或值
传递给一些其他活动
,但如果您有一组变量或值
,需要传递给各种活动
,该怎么办。在这种情况下,您可以使用Bundle
并轻松地将Bundle
传递给所需的活动。您可以看到,Intent
将其内部存储在包中,而不是每次都传递单个变量。
public Intent putExtra(String name, String value) {
if (mExtras == null) {
mExtras = new Bundle();
}
mExtras.putString(name, value);
return this;
}
我猜@Lalit的意思是假设您的活动总是将相同的变量传递给不同的意图,您可以将所有变量存储在类中的单个包中,只要在需要相同的参数集时使用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
将参数存储在内部包中,值得注意的是,当您调用putExtras
时,内部Intent包并不指向同一个对象,而是创建所有变量的副本,使用一个简单的for
:
for (int i=0; i<array.mSize; i++) {
put(array.keyAt(i), array.valueAt(i));
}
用于(int i=0;我在问为什么?我们将在bundle中放入相同的额外数据,并将该bundle添加到intent对象中。我们可以将该bundle直接放入intent对象中。不是吗?不是,不是。您只需要传递一个bundle
。是否确实要将其逐字段复制到intent
。如果bundle的键e
和意图
会重叠吗?你不可能知道人们做的所有事情,只要记住,你可以将捆绑
放入意图
中,当你需要它时,你就会知道该怎么做。举个小例子:你想把数据库中的一行和其他一些数据一起传递。存储这一行非常方便在Bundle
中。在我的一个应用程序中,我使用Bundle
列表从数据库中传递几行。这不是一个方便的原因,伙计。请参见下面的原因,这更好。+1。这取决于您如何估计方便程度。我给了您一个现实生活中的示例,但我从未遇到过这样的情况当我不得不将大量变量放入捆绑包中时,仅仅是因为有大量变量。通常人们在这种情况下创建可打包的对象。它更安全,更易于理解和维护。mExtras=new Bundle()
这还不够令人信服吗?如果不足够,请亲自查看Intent.java
的源代码。