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

时间:2011-02-15 04:49:57

标签: android bundle android-bundle

Android应用程序中的bundle是什么?何时使用?

12 个答案:

答案 0 :(得分:264)

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

你可以像这样使用它:

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

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

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

您可以在以下网址找到更多信息:

答案 1 :(得分:65)

使用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 :(得分:64)

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

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

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

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

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

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

答案 3 :(得分:36)

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

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

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

答案 4 :(得分:14)

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

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

答案 5 :(得分: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);

答案 6 :(得分:5)

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

答案 7 :(得分:3)

软件包: - 从String值到各种Parcelable类型的映射。

Bundle通常用于在android的各种活动之间传递数据。

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

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

答案 8 :(得分:2)

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

答案 9 :(得分:0)

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

我认为这对你很有用............

答案 10 :(得分:0)

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

,例如EditText窗口小部件中的文字或ListView的滚动位置。

答案 11 :(得分: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");