欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android 不同Activity间数据的传递 Bundle对象的应用

程序员文章站 2023-12-11 23:08:52
在应用中,可能会在当跳转到另外一个activity的时候需要传递数据过去,这时就可能用bundle对象; 在mainactivity中,有一个导航至bactivity的i...

在应用中,可能会在当跳转到另外一个activity的时候需要传递数据过去,这时就可能用bundle对象;

在mainactivity中,有一个导航至bactivity的intent,

intent

复制代码 代码如下:

{

  intent intent = new intent(context context, class<?> class);
  //new一个bundle对象,并将要传递的数据导入,bunde相当于map<key,value>结构   
  bundle bundle = new bundle();
  bundle.putstring("name","livingstone");
  bundle.putxxx(xxxkey, xxxvalue);
  //将bundle对象添加给intent
  intent.putextras(bundle);
  //调用intent对应的activity
  startactivity(intent);

}


在bactivity中,通过以下代码获取mainactivity所传过来的数据

  bundle bundle = this.getintent().getextras();// 获取传递过来的封装了数据的bundle
  string name = bundle.getstring("name");// 获取name_key对应的value
  // 获取值时,添加进去的是什么类型的获取什么类型的值

     --> bundle.getxxx(xxxkey);

       return xxxvalue

上面讲述的都是一般的基本数据类型,当需要传递对象的时候,可以使该对象实现parcelable或者是serializable接口;

通过bundle.putparcelable(key,obj)及bundle.putserializable(key,obj)方法将对象添加到bundle中,再将此bundle对象添加到intent中!


在跳转的目标页面通过intent.getparcelableextra(key)获取实现了parcelable的对象;

在跳转的目标页面通过intent.getserializableextra(key)获取实现了serializable的对象;

今天在研究的时候发现,intent.putextra(key,value);其实也可以传递数据,包括上面所讲的对象!

实现serializable接口很简单,不再描述;

下面描述实现parcelable接口:

复制代码 代码如下:

public class book implements parcelable {
 private string bookname;
 private string author;

 public static final parcelable.creator creator = new creator() {// 此处必须定义一个creator成员变量,要不然会报错!

  @override
  public book createfromparcel(parcel source) {// 从parcel中获取数据,在获取数据的时候需要通过此方法获取对象实例
   book book = new book();
   book.setauthor(source.readstring());// 从parcel读取数据,读取数据与写入数据的顺序一致!
   book.setbookname(source.readstring());
   return book;
  }

  @override
  public book[] newarray(int size) {
   return new book[size];
  }
 };

 @override
 public int describecontents() {
  return 0;
 }

 @override// 写入parcel
 public void writetoparcel(parcel dest, int flags) {
  dest.writestring(author);// 将数据写入parcel,写入数据与读取数据的顺序一样!
  dest.writestring(bookname);
 }
}


 关于parcel,大概查阅了一下描述:

 一个final类,用于写或读各种数据,所有的方法不过就是writevalue(object)和read(classloader)!(个人翻译理解)

上一篇:

下一篇: