293

bundleAndroid 应用程序中的a 是什么?什么时候使用它?

4

12 回答 12

297

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

你可以像这样使用它:

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

您可以通过执行以下操作获取传递的值:

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

您可以在以下位置找到更多信息:

于 2011-02-15T05:01:44.470 回答
93

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


您首先创建一个Bundle对象

Bundle b = new Bundle();

然后,将存储的字符串数据anystring与 bundle key关联起来"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");
于 2012-08-12T17:14:14.450 回答
72

我必须补充一点,活动将来会使用捆绑包将数据传递给自己。

当屏幕旋转时,或者当另一个 Activity 启动时,该方法protected void onSaveInstanceState(Bundle outState)被调用,该 Activity 被销毁。稍后,该活动的另一个实例被创建并被public void onCreate(Bundle savedInstanceState)调用。当第一个activity实例被创建时,bundle为null;如果捆绑包不为空,则该活动将继续其前身开始的某些业务。

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

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

有一个选项可以禁用这种“重新创建旋转活动”行为,但它不会阻止与重启相关的错误,只会让它们更难提及。

另请注意,在要销毁活动时保证调用的唯一方法是onPause(). (请参阅文档中的活动生命周期图。)

于 2012-05-31T12:24:38.323 回答
60

更新:对于 Android,“捆绑”一词有两个完全不相关的含义。我在下面的原始答案中详细介绍了一个。另一个是应用程序包。这是一种较新的存档文件格式(以 .aap 结尾),其中包含一个 Android 应用程序和一些额外的元数据。您可以上传应用程序包文件而不是应用程序 APK 文件,以通过 Google Play 分发您的应用程序。与 .apk 文件相比,App Bundle 具有一定的优势,但可能与其他应用商店(例如 Amazon App Store)不兼容。我的原始答案中包含的文档链接中描述了这些优点。

原答案:

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

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

我建议您阅读有关Application Fundamentals的文档。这解释了什么是捆绑包和意图以及它们的用途。

于 2011-02-15T05:00:20.120 回答
15

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

Bundles 是键值映射,因此在某种程度上它们类似于 Hash,但它们并不严格限于单个 String / Foo 对象映射。请注意,只有某些数据类型被认为是“Parcelable”,并且它们在 Bundle API 中明确说明。

于 2011-02-15T04:57:20.587 回答
8

只需创建一个捆绑包,


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);
于 2014-02-11T12:07:22.670 回答
5

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

于 2011-02-15T04:55:08.397 回答
3

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

Bundle一般用于android的各个activity之间传递数据。

当我们调用 onPause() 然后 onStop() 然后以相反的顺序 onStop() 到 onPause()。

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

于 2015-08-16T17:26:38.613 回答
2

bundle 用于在活动之间共享数据,并在 oncreate() 方法中保存应用程序的状态,以便应用程序知道它在哪里停止......我希望它有所帮助:)

于 2013-07-29T10:52:32.467 回答
0

使用 bundle 在意图对象的帮助下将数据从一个活动发送到另一个活动;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");

我觉得这对你有用…………

于 2015-04-09T10:04:39.463 回答
0

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

例如EditText小部件中的文本或 a 的滚动位置ListView

于 2015-06-18T15:36:22.670 回答
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");
于 2016-12-21T20:49:37.643 回答