2011-02-15 23 views

回答

225

Bundles通常用于在各种Android活动之间传递数据。它取决于你想要传递什么类型的值,但bundle可以保存所有类型的值并将它们传递给新的活动。

您可以使用它像这样:

Intent intent = new... 
Intent(getApplicationContext(), SecondActivity.class); 
intent.putExtra("myKey", AnyValue); 
startActivity(intent); 

您可以通过执行获得传递的值:

Bundle extras = intent.getExtras(); 
String tmp = extras.getString("myKey"); 

你可以找到更多的信息:

5

Bundle用于在活动之间传递数据。您可以创建一个捆绑包,将其传递给Intent,以启动可从目标活动使用的活动。

+0

Gsree感谢,,什么是意图 – User 2011-02-15 04:57:47

+0

的作用,它也使用了一个活动来保存和检索它的状态,当它被关闭并重新启动(例如设备旋转时)。 – 2011-02-15 04:58:36

+1

@Tushar查看@Ted Hopp的回复链接。这将解释更多关于意图和活动。 – GSree 2011-02-16 00:29:08

14

Bundles可以用于通过Intents将任意数据从一个活动发送到另一个活动。当您广播一个意图时,感兴趣的活动(和其他BroadcastRecievers)将被通知。一个意图可以包含一个Bundle,以便您可以发送额外的数据以及Intent。

Bundle是键值映射,所以它们就像一个Hash,但它们并不严格局限于单个String/Foo对象映射。请注意,只有某些数据类型被视为“Parcelable”,并且它们在Bundle API中明确拼写出来。

+0

这是迄今为止真正解决OP问题的唯一答案,即什么是捆绑。 http://stackoverflow.com/a/6236801/1588163提供更多见解。 – clapas 2014-10-03 10:55:05

+0

为什么要使用一个包,如果我们只能使用映射?谢谢! – 2016-01-28 01:37:32

+0

@RuchirBaronia没有什么特别的理由要使用Bundle,除非你打算把它传递给需要Bundle对象的Android API的一部分。 – scriptocalypse 2016-01-28 01:46:43

22

A Bundle非常类似于将String键映射到值的Java对象Map。它用于在活动和其他应用程序组件之间传递信息。它也被框架用来捕获和恢复状态信息。

Android不使用普通旧Map对象的原因是Map太灵活;它可以包含无法序列化的对象(比如说,I/O流)。 Bundle API限制了可以添加到捆绑包的对象的类型,使捆绑的内容保证可序列化。 Android框架依赖于这个属性。

我建议您阅读关于Application Fundamentals的文档。除此之外,这解释了捆绑和意图是什么以及它们用于什么。

+0

为什么使用一个包,如果我们只能使用映射?谢谢泰德! – 2016-01-28 01:37:25

60

我要补充的是束通过活动用于将数据传递给自己的未来。

当屏幕旋转或者其他活动启动时,方法protected void onSaveInstanceState(Bundle outState)被调用,并且活动被破坏。稍后,创建另一个活动实例,并调用public void onCreate(Bundle savedInstanceState)。当创建第一个活动实例时,该包为空;如果该捆绑包不为空,该活动继续其前任开始的一些业务。

Android会自动将文本保存在文本字段中,但它不会保存所有内容,并且有时会出现细微的错误。

虽然最常见的反模式是假设onCreate()只是初始化。这是错误的,因为它也必须恢复状态。

有一个选项可禁用此“重新创建循环活动”行为,但它不会阻止与重新启动相关的错误,它只会使其更难以提及。

还要注意,当活动将被销毁时保证其呼叫的唯一方法是onPause()。 (请参阅文档中的活动生命周期图。)

53

通过使用BundleIntent对象在活动之间传递数据。


你首先要创建一个Bundle对象

Bundle b = new Bundle(); 

然后,存储在anystring字符串数据与束键"myname"

b.putString("myname", anystring); 

现在联系起来,创建一个Intent对象

Intent in = new Intent(getApplicationContext(), secondActivity.class); 

通行证捆绑对象b的意图

in.putExtras(b); 

,并开始第二活动

startActivity(in); 

在第二个活动,我们要访问从第一个活动传递的数据

Intent in = getIntent(); 

现在,你需要从包中获取数据

Bundle b = in.getExtras(); 

最后得到一个名为"myname"

String s = b.getString("myname"); 
2

键关联的字符串数据包来共享活动之间的数据值, 和保存状态的应用程序在oncreate()方法,以便应用程序会知道它停止在哪里... 我希望它可以帮助:)

7

只需创建一个包,


Bundle simple_bundle=new Bundle(); 
simple_bundle.putString("item1","value1"); 
Intent i=new Intent(getApplicationContext(),this_is_the_next_class.class); 
i.putExtras(simple_bundle); 
startActivity(i); 

在这样的 “this_is_the_next_class.class”

您可以检索的项目。

Intent receive_i=getIntent(); 
Bundle my_bundle_received=receive_i.getExtras(); 
my_bundle_received.get("item1"); 
Log.d("Value","--"+my_bundle_received.get("item1").toString); 
0

使用捆绑包通过intent对象将数据从一个活动发送到另一个活动; Bundle保存可以是任何类型的数据。

现在我告诉如何在两个活动之间创建数据包传递数据。

步骤1:在第一项活动

Bundle b=new Bundle(); 

b.putString("mkv",anystring); 

Intent in=new Intent(getApplicationContext(),secondActivity.class); 

in.putExtras(b); 

startActivity(in); 

步骤2:在第二个活动

Intent in=getIntent(); 

Bundle b=in.getExtras(); 

String s=b.getString("mkv"); 

我认为这是对您有用...........

0

Bundle不仅用于在两个不同组件之间传输数据,更重要的是它用于将活动被破坏之前存储的值恢复到新活动中。

EditText小部件中的文本或ListView的滚动位置。

3

Bundle: - 从String值到各种Parcelable类型的映射。

Bundle通常用于在android的各种活动之间传递数据。当我们调用onPause()然后onStop(),然后以相反的顺序onStop()到onPause()时,我们会调用这个方法来调用这个方法。

系统用于恢复先前状态的已保存数据称为“实例状态”,是存储在Bundle对象中的键值对的集合。

0

第一项活动:

String food = (String)((Spinner)findViewById(R.id.food)).getSelectedItem(); 
RadioButton rb = (RadioButton) findViewById(R.id.rb); 
Intent i = new Intent(this,secondActivity.class); 
i.putExtra("food",food); 
i.putExtra("rb",rb.isChecked()); 

次活动:

String food = getIntent().getExtras().getString("food"); 
Boolean rb = getIntent().getExtras().getBoolean("rb"); 
相关问题