捆绑在Android中意味着什么?

时间:2013-02-18 12:45:54

标签: android bundle

我是Android应用程序开发的新手,无法理解bundle实际上为我们做了什么。

任何人都能为我解释一下吗?

7 个答案:

答案 0 :(得分:23)

  

我是Android应用程序开发的新手,无法理解   捆绑实际上是为我们做的。有谁可以帮我解释一下?

用我自己的话说,你可以像 MAP 那样将原始数据类型对象存储为 key-value

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

同样 Bundle 作为 onCreate() 的参数当您想要在设备方向更改时保存数据时,可以使用活动的生命周期方法(在这种情况下,活动被销毁并使用非null参数再次创建为Bundle)。

有关 Bundle 的更多信息,您可以阅读reference at developer.android.com应该从哪里开始,然后制作一些演示应用程序来获取经验。

使用示范示例:

通过活动传递原始数据类型:

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));


通过活动传递Parcelable对象:

还有更多代码,所以这里有文章如何做:


如何在目标活动中检索数据:

有一种神奇的方法: getIntent() 返回Intent(如果有任何数据也包含扩展数据),从那里调用启动Activity的方法。

所以:

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");
}


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

您将数据存储在 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()

答案 1 :(得分:8)

一般来说,英语:“这是一系列的东西,或一定数量的材料,捆绑或包裹在一起。”

Android中的相同方式“它是一组键及其值,用于存储某种数据。”

答案 2 :(得分:4)

Bundle通常用于在各种组件之间传递数据。 Bundle类,可以通过getExtras()方法从intent中检索。

您还可以通过Intent对象的重载putExtra()方法将数据直接添加到Bundle。额外是键/值对,键始终是String类型。作为值,您可以使用原始数据类型。

接收组件可以通过Intent对象上的getAction()和getData()方法访问此信息。可以通过getIntent()方法检索此Intent对象。和 接收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 :(得分:3)

捆绑或包裹在一起的东西或一定数量的材料的集合。它是字典的含义......同一个Bundle是一个数据集合。数据可以是任何类型,即String,int,float,boolean和任何可序列化的数据。我们可以分享&amp;使用包Bundle将一个Activity的数据保存到另一个Activity。

答案 4 :(得分:2)

将其视为一组数据,在将数据从一个Activity传递到另一个Activity时使用。

documentation将其定义为

  

“从String值到各种Parcelable类型的映射。”

您可以将数据放入Bundle中,然后将此Bundle传递给多个活动。这很方便,因为您不需要传递单个数据。您将所有数据放入Bundle中,然后只传递Bundle,而不是单独发送数据。

答案 5 :(得分:1)

它实际上是一堆东西;信息:你把东西放在那里(字符串,整数等),然后在使用意图时将它们作为单个参数(包)传递。

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

答案 6 :(得分:1)

从String值到各种Parcelable类型的映射。Click here

示例:

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

将值从一个活动发送到另一个活动。