在Android中,“bundle”是什么意思?

14
我刚开始学习安卓应用开发,不太明白bundle到底是做什么的,能有人为我解释一下吗?
7个回答

23

我是新手安卓应用开发者,不理解bundle实际上为我们做了什么。能有人为我解释一下吗?

我的理解是,你可以将Bundle想象成一个MAP,它存储着原始数据类型对象作为键值对

Bundle通常用于通过各种Activities传递数据。提供putType()getType()方法用于从中存储和检索数据。

此外,在Activity的生命周期方法onCreate()的参数中使用Bundle时,当设备方向改变时,可以用于保存数据(在这种情况下,Activity被销毁并再次创建,其参数不为空)。

您可以在开发者文档中的参考页面了解更多关于Bundle及其方法的信息,然后制作一些演示应用程序以获得经验。

用法演示示例:

通过Activities传递原始数据类型:

Intent i = new Intent(ActivityContext, TargetActivity.class);
Bundle dataMap = new Bundle();
dataMap.putString("key", "value");
dataMap.putInt("key", 1);
i.putExtras(dataMap);
startActivity(i);

通过活动传递值的列表:

Bundle dataMap = new Bundle();
ArrayList<String> s = new ArrayList<String>();
s.add("Hello");
dataMap.putStringArrayList("key", s); // also Integer and CharSequence
i.putExtras(dataMap);
startActivity(i);

通过活动传递序列化对象:

public class Foo implements Serializable {

   private static final long serialVersionUID = 1L;

   private ArrayList<FooObject> foos;

   public Foo(ArrayList<FooObject> foos) {
      this.foos = foos;
   }

   public ArrayList<FooObject> getFoos() {
      return this.foos;
   }        
}


public class FooObject implements Serializable {

   private static final long serialVersionUID = 1L;

   private int id;

   public FooObject(int id) {
      this.id = id;
   }

   public int getId() {
      return id;
   }

   public void setId(int id) {
      this.id = id;
   }
}

那么:

Bundle dataMap = new Bundle();
ArrayList<FooObject> foos = new ArrayList<FooObject>();
foos.add(new FooObject(1));
dataMap.putSerializable("key", new Foo(foos));


通过 Activities 传递 Parcelable 对象:

这里有很多的代码,以下是如何实现的文章:


如何在目标 Activity 中检索数据:

有一个神奇的方法:getIntent(),它返回启动该方法的 Intent(如果还带有拓展数据)。

所以:

Bundle dataFromIntent = getIntent().getExtras();
if (dataFromIntent != null) {
   String stringValue = dataFromIntent.getString("key");
   int intValue = dataFromIntent.getInt("key");
   Foo fooObject = (Foo) dataFromIntent.getSerializable("key");
   // getSerializble returns Serializable so we need to cast to appropriate object.
   ArrayList<String> stringArray = dataFromIntent.getStringArrayList("key");
}


onCreate()方法中使用Bundle作为参数的用法:

您可以像下面这样在onSaveInstanceState()方法中存储数据:

@Override
public void onSaveInstanceState(Bundle map) {
   map.putString("key", "value");
   map.putInt("key", 1);
}

接下来在 onCreate() 方法中恢复它们(在这种情况下,将Bundle作为参数不为null):

@Override
public void onCreate(Bundle savedInstanceState) {
   if (savedInstanceState != null) {
      String stringValue = savedInstanceState.getString("key");
      int intValue = savedInstanceState.getString("key");
   }
   ...
}

注意:你也可以在onRestoreInstanceState()方法中还原数据,但这不常见(它在onStart()方法之后调用,而onCreate()在其之前调用)。


8

通常的英文定义是:“这是一组事物,或者是材料的数量,用绳子或包裹捆绑在一起。”

在Android中,"它是一个键及其值的集合,用于存储某些类型的数据。"


4

Bundle通常用于在不同组件之间传递数据。可以通过从意图(intent)中使用getExtras()方法检索的Bundle类来实现。

您还可以通过Intent对象的重载putExtra()方法直接向Bundle添加数据。Extras是键值对,键始终为字符串类型。作为值,您可以使用原始数据类型。

接收组件可以通过Intent对象上的getAction()和getData()方法访问此信息。可以通过getIntent()方法检索此Intent对象。接收到意图的组件可以使用getIntent().getExtras()方法调用来获取额外的数据。

MainActivity

Intent intent = new Intent(MainActivity.this,SecondActivity.class);

Bundle bundle = new Bundle();

bundle.putString(“Key“, myValue);

intent.putExtras(bundle);

startActivity(intent);

SecondActivity

Bundle bundle = getIntent().getExtras();

String myValue= bundle.getString(“key“);

3
一堆东西,或者一定数量的材料,被捆绑或包裹在一起。这是词典上的定义...同样,Bundle是一组数据的集合。这些数据可以是任何类型,例如字符串、整数、浮点数、布尔值和可序列化数据。我们可以使用Bundle Bundle分享和保存一个活动中的数据到另一个活动中。

2
将其视为一组数据,用于在一个Activity到另一个Activity之间传递数据。根据文档的定义,它是“从字符串值到各种可Parcelable类型的映射”。您可以将数据放入Bundle中,然后将此Bundle传递给多个活动。这很方便,因为您不需要传递单个数据。您将所有数据放入Bundle中,然后只需传递Bundle,而不是单独发送数据。

1
这实际上是一组东西的捆绑; 信息:您将内容放入其中(字符串,整数等),并在使用意图时将它们作为单个参数(包)传递。

然后,您的目标(活动)可以再次获取它们并读取ID,模式,设置等。


谢谢你的回答,Nanne。所以它们就像对象一样?我们在启动一个活动时传递它们,并在另一个活动中接收它们的值...如果我错了,请纠正我。 - Ejaz Karim
它是一个对象(它是某个类),您可以在其中放置其他对象。您有添加整数、字符串等名称的函数,并再次检索它们的功能。 - Nanne
现在我有清晰的想法了,非常感谢。 - Ejaz Karim

1

一个将字符串值映射到各种可 Parcelable 类型的映射表。点击这里

示例:

Intent mIntent = new Intent(this, Example.class);
Bundle mBundle = new Bundle();
mBundle.extras.putString(key, value);
mIntent.putExtras(mBundle);

将一个活动中的值发送到另一个活动。

感谢提供代码示例...非常有用。 - Ejaz Karim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接