捆绑在Android中意味着什么?

Eja*_*rim 14 android bundle

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

有谁可以帮我解释一下?

Sim*_*iak 23

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

用我自己的话说,你可以把它想象成一个MAP存储原始数据类型对象的情侣key-value

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

此外Bundle,onCreate()当您希望在更改设备方向时保存数据时,可以使用Activity的生命周期方法的参数(在这种情况下,活动将被销毁并使用非null参数再次创建为Bundle).

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

演示用例示例:

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

通过活动传递值列表:

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

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

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

然后:

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


通过活动传递Parcelable对象:

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


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

有一个神奇的方法: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");
}
Run Code Online (Sandbox Code Playgroud)


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

您在onSaveInstanceState()方法中存储数据如下:

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

并在onCreate()方法中恢复它们(在本例中Bundle为参数not null),如下所示:

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

注意:您也可以在onRestoreInstanceState()方法中恢复数据,但这并不常见(它在onStart()方法之后onCreate()调用并在之前调用).


Har*_*eet 8

一般来说,英语:"它是一系列东西,或一定数量的材料,捆绑或包裹在一起."

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