Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/219.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 意向与捆绑关系_Android_Android Intent - Fatal编程技术网

Android 意向与捆绑关系

Android 意向与捆绑关系,android,android-intent,Android,Android Intent,在使用Intent对象时,我们可以使用其putExtra()直接放置不同类型的数据。我们还可以将这些额外的数据放入一个Bundle对象中,并将其添加到Intent中。那么,如果我们可以直接使用Intent来实现,为什么我们需要Bundle呢?假设您需要将Bundle从一个活动传递到另一个活动。这就是为什么Intent允许您添加Bundles作为额外字段的原因 编辑:例如,如果您想将数据库中的一行与其他一些数据一起传递,可以非常方便地将该行放入捆绑包,并将该捆绑包添加到意图中作为一个额外字段。有时

在使用Intent对象时,我们可以使用其
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
的源代码。