2011-09-24 80 views
10

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

回答

7

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

+1

对不起,但这是错误的,检查我的答案知道为什么。 – Reno

+0

'mExtras = new Bundle();'这不够有说服力吗?如果不去,请自己检查'Intent.java'的源代码。 – Reno

3

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

编辑:例如,如果你想从一个数据库是把这个行插入Bundle非常方便的一些其他数据一起传递一行,并添加此BundleIntent作为一个额外的字段。

+0

我在问为什么?我们将把相同的额外数据放入bundle中,并将该bundle添加到intent对象中,以便我们可以直接将其放入intent对象中。是不是? –

+0

不是,它不是。你只需要一个'Bundle'你需要通过。你真的想将它逐场复制到'Intent'。如果“Bundle”和“Intent”的键重叠?你不能知道人们所做的所有事情,只要记住你可以将一个'Bundle'放入一个'Intent'中,当你需要它时,你就会知道该怎么做。 – Michael

+0

一个小例子:你想从数据库中传递一行数据以及其他一些数据。将此行存储在“Bundle”中非常方便。在我的一个应用程序中,我使用了一个'Bundle'列表来传递数据库中的多行。 – Michael

15

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

public Intent putExtra(String name, String value) { 
    if (mExtras == null) { 
     mExtras = new Bundle(); 
    } 
    mExtras.putString(name, value); 
    return this; 
} 
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,内部意向束不指向同一个对象,但创建一个所有变量的副本,而不是像这样使用简单for

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