Intent实现A页面跳转到B页面,通过意图由A界面传递对象及对象列表的详解
好多时候我们需要通过意图实现A界面向B界面跳转的实现,同时希望A界面传递一些特定的参数给B界面,Adnroid为我们提供了Intent这个类.通过Intent类里边的一洗了 putxxx(),getxxxx()实现基本数据类型的传递,例如从A页面传递一个整形,字符型,数据等。但是对于传递复杂类型,例如对象,对象列表,Intent里边提供两组方法需要详细认识下。
a)传递对象的一组方法:putSerializable() getSerializable()
b)传递对象列表的一组方法:putParcelableArrayListExtra()、getParcelableArrayListExtra()
实现举例
一:传递对象
如果需要传递对象,对象需要继承Serializable接口,在Bundle中有一个putSerializable方法。
[java] Activity1
public class User implements Serializable {
//其他代码省略
}
在Activity1中的java代码
[java] Activity1
User user = new User();
Intent intent = new Intent( Activity1.this,Activity2.class);
intent.putSerializable("user", user);
startActivity(intent);
在Activity2中获取的java代码
[java] Intent intent = getIntent();
User user=(user)intent.getSerializableExtral("user");
二:传递对象列表
如果传递对象列表需要实现Parcelable接口。
/*实现Paraceable接口的对象*/
public class MusicParcelable implements Parcelable{
private String path;
private String title;
public String getPath() {
return path;
}
public void setPath(String path) {
this.path = path;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
@Override
public int describeContents() {
// TODO Auto-generated method stub
return 0;
}
public MusicParcelable(String path,String title){
this.path=path;
this.title=title;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
// TODO Auto-generated method stub
dest.writeString(path);
dest.writeString(title);
}
public static final Parcelable.Creator<MusicParcelable> CREATOR = new Creator<MusicParcelable>() {
public MusicParcelable createFromParcel(Parcel source) {
// TODO Auto-generated method stub
/*按顺序获得 第一个字符串字段是路径,第二个字符字段是标题*/
MusicParcelable p = new MusicParcelable(source.readString(),source.readString());
return p;
}
public MusicParcelable[] newArray(int size) {
// TODO Auto-generated method stub
return new MusicParcelable[size];
}
};
}
在Activity1中发送的java代码
/*初始化序列*/
public ArrayList<MusicParcelable> getMusicDataParcelable(){
ArrayList<MusicParcelable> musicParcelablesList= new ArrayList<MusicParcelable>();
if(musicdata!=null&&musicdata.size()>0){
int count=musicdata.size();
for(int i=0;i<count;i++){
//musicdata是一个数组列表
MusicParcelable music=new MusicParcelable(musicdata.get(i).res, musicdata.get(i).title);
musicParcelablesList.add(i, music);
}
}
return musicParcelablesList;
}
public static String LOCAL_RESORE_MUSIC="resource_music";
Intent intent =new Intent(Acitivty1.this,Activity2.class);
intent.putParcelableArrayListExtra(LocalType.LOCAL_RESORE_MUSIC, getMusicDataParcelable());
startActivity(intent);
startActivity(intent);
在Activity2中接收的java代码
private ArrayList<MusicParcelable> musiclist=new ArrayList<MusicParcelable>();
musiclist=intent.getParcelableArrayListExtra(LocalType.LOCAL_RESORE_MUSIC);
想获得特定位置i处的参数:
String path=musiclist.get(i).getPath();
String title=musiclist.get(i).getTitle();