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

 

posted @ 2013-03-05 14:56  追梦一生  阅读(645)  评论(0编辑  收藏  举报