什么是Android应用程序中的"捆绑"

Use*_*ser 269 android bundle android-bundle

什么是bundleAndroid应用程序?什么时候用?

小智 273

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

你可以像这样使用它:

Intent intent = new...
Intent(getApplicationContext(), SecondActivity.class);
intent.putExtra("myKey", AnyValue);  
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

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

Bundle extras = intent.getExtras(); 
String tmp = extras.getString("myKey");
Run Code Online (Sandbox Code Playgroud)

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

  • 为什么不直接使用System.object和强制转换? (3认同)

小智 73

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


你首先创建一个Bundle对象

Bundle b = new Bundle();
Run Code Online (Sandbox Code Playgroud)

然后,将存储的字符串数据anystring与bundle密钥相关联"myname"

b.putString("myname", anystring);
Run Code Online (Sandbox Code Playgroud)

现在,创建一个Intent对象

Intent in = new Intent(getApplicationContext(), secondActivity.class);
Run Code Online (Sandbox Code Playgroud)

将bundle对象传递b给intent

in.putExtras(b);
Run Code Online (Sandbox Code Playgroud)

并开始第二项活动

startActivity(in);
Run Code Online (Sandbox Code Playgroud)

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

Intent in = getIntent();
Run Code Online (Sandbox Code Playgroud)

现在,您需要从捆绑包中获取数据

Bundle b = in.getExtras();
Run Code Online (Sandbox Code Playgroud)

最后,获取与key命名关联的字符串数据的值 "myname"

String s = b.getString("myname");
Run Code Online (Sandbox Code Playgroud)


184*_*615 65

我必须补充一点,活动使用bundle来将数据传递给自己.

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

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

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

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

另请注意,当活动将被销毁时,唯一可以保证其调用的方法是onPause().(请参阅文档中的活动生命周期图.)

  • Bundle不仅被Activity使用.Fragment还使用它来保持旋转后的状态. (4认同)

Ted*_*opp 42

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

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

我建议您阅读有关应用程序基础知识的文档.除其他外,这解释了捆绑和意图是什么以及它们的用途.


scr*_*pse 14

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

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


小智 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);
Run Code Online (Sandbox Code Playgroud)

在"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);
Run Code Online (Sandbox Code Playgroud)


GSr*_*ree 5

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