Android 不同Activity间数据的传递 Bundle对象的应用
在应用中,可能会在当跳转到另外一个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)!(个人翻译理解)