bundle
Android 应用程序中的a 是什么?什么时候使用它?
12 回答
Bundles 通常用于在各种 Android 活动之间传递数据。这取决于您要传递什么类型的值,但捆绑包可以保存所有类型的值并将它们传递给新活动。
你可以像这样使用它:
Intent intent = new...
Intent(getApplicationContext(), SecondActivity.class);
intent.putExtra("myKey", AnyValue);
startActivity(intent);
您可以通过执行以下操作获取传递的值:
Bundle extras = intent.getExtras();
String tmp = extras.getString("myKey");
您可以在以下位置找到更多信息:
通过使用Bundle
和Intent
对象在活动之间传递数据。
您首先创建一个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");
我必须补充一点,活动将来会使用捆绑包将数据传递给自己。
当屏幕旋转时,或者当另一个 Activity 启动时,该方法protected void onSaveInstanceState(Bundle outState)
被调用,该 Activity 被销毁。稍后,该活动的另一个实例被创建并被public void onCreate(Bundle savedInstanceState)
调用。当第一个activity实例被创建时,bundle为null;如果捆绑包不为空,则该活动将继续其前身开始的某些业务。
Android 会自动将文本保存在文本字段中,但它不会保存所有内容,并且有时会出现细微的错误。
然而,最常见的反模式是假设onCreate()
它只是初始化。这是错误的,因为它还必须恢复状态。
有一个选项可以禁用这种“重新创建旋转活动”行为,但它不会阻止与重启相关的错误,只会让它们更难提及。
另请注意,在要销毁活动时保证调用的唯一方法是onPause()
. (请参阅文档中的活动生命周期图。)
更新:对于 Android,“捆绑”一词有两个完全不相关的含义。我在下面的原始答案中详细介绍了一个。另一个是应用程序包。这是一种较新的存档文件格式(以 .aap 结尾),其中包含一个 Android 应用程序和一些额外的元数据。您可以上传应用程序包文件而不是应用程序 APK 文件,以通过 Google Play 分发您的应用程序。与 .apk 文件相比,App Bundle 具有一定的优势,但可能与其他应用商店(例如 Amazon App Store)不兼容。我的原始答案中包含的文档链接中描述了这些优点。
原答案:
ABundle
非常类似于将键映射到值的 JavaMap
对象。String
它用于在活动和其他应用程序组件之间传递信息。框架还使用它来捕获和恢复状态信息。
Android 不为此使用普通旧Map
对象的原因Map
是太灵活了。它可以包含无法序列化的对象(例如,I/O 流)。Bundle
API 限制可以添加到包中的对象类型,以保证包的内容是可序列化的。Android 框架依赖于这个属性。
我建议您阅读有关Application Fundamentals的文档。这解释了什么是捆绑包和意图以及它们的用途。
Bundles 可用于通过 Intent 将任意数据从一个活动发送到另一个活动。当您广播 Intent 时,将通知感兴趣的活动(和其他广播接收者)。Intent 可以包含一个 Bundle,以便您可以随 Intent 一起发送额外的数据。
Bundles 是键值映射,因此在某种程度上它们类似于 Hash,但它们并不严格限于单个 String / Foo 对象映射。请注意,只有某些数据类型被认为是“Parcelable”,并且它们在 Bundle API 中明确说明。
只需创建一个捆绑包,
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);
Bundle用于在Activity之间传递数据。您可以创建一个捆绑包,将其传递给启动活动的 Intent,然后可以从目标活动中使用该活动。
Bundle:- 从 String 值到各种 Parcelable 类型的映射。
Bundle一般用于android的各个activity之间传递数据。
当我们调用 onPause() 然后 onStop() 然后以相反的顺序 onStop() 到 onPause()。
系统用来恢复之前状态的保存数据称为“实例状态”,是存储在 Bundle 对象中的键值对的集合。
bundle 用于在活动之间共享数据,并在 oncreate() 方法中保存应用程序的状态,以便应用程序知道它在哪里停止......我希望它有所帮助:)
使用 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");
我觉得这对你有用…………
Bundle 不仅是在两个不同的组件之间传输数据,更重要的是它用于将活动销毁之前存储的值恢复为新活动。
例如EditText
小部件中的文本或 a 的滚动位置ListView
。
第一项活动:
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");