将Array <object>从一个活动传递到另一个活动

时间:2016-04-05 04:40:20

标签: java android object android-studio arraylist

我有以下两个班级。

public class People{

        private int mobile_number;
        private String email_id, name;
        private Testimony[] testimony;


            public People(String name, int mobile_number, String email_id, Testimony ... testimony) {
                this.name = name;
                this.mobile_number = mobile_number;
                this.email_id = email_id;
                this.testimony = testimony;
            }

            public Testimony[] getTestimony() {
                return testimony;
            }

            public String getEmail_id() {
                return email_id;
            }

            public int getMobile_number() {
                return mobile_number;
            }

            public String getName() {
                return name;
            }
}

public class Testimony {

    private String testimony;
    private String name;
    private int id;

    public Testimony(String testimony,String name, int id){
        this.testimony = testimony;
        this.id = id;
        this.name = name;
    }

    public String gettestimony() {
        return testimony;
    }

    public String getname() {
        return name;
    }

    public int getid() {
        return id;
    }

}

ArrayList myPeople中有很多对象,我碰巧知道需要使用哪个ArrayList项。考虑到Testimony ArrayList具有可变数量的对象并且有时可能具有大量对象这一事实,将特定人物对象从一个Activity传递到另一个Activity的最佳方法是什么。

another question内容相似,但它实际上是不同的,因为另一个问题解决了如何将对象传递给另一个Android Activity而不是 数组对象

5 个答案:

答案 0 :(得分:1)

您可以让您的类实现Serializable,然后在启动活动时执行

yourIntent.putExtra("myObj", obj);

和其他活动:

getIntent().getSerializableExtra("myObj");

How to pass an object from one activity to another on Android

答案 1 :(得分:1)

虽然你可以使用序列化方法将arraylist从一个活动传递给其他活动,但我觉得这不是好方法。

而是创建一个Singleton类和setter和getter方法来设置和获取arraylist。

在第一个活动中初始化单个对象并设置arraylist值。

您可以在其他活动中获取单例类实例,并获取已由第一个活动设置的arraylist。

例如:

public class UtilityClass {

   private static UtilityClass instance;

   private ArrayList list;

   public ArrayList getList() {
       return list;
   }

   public void setList(ArrayList list) {
       this.list = list;
   }

   private UtilityClass(){}

   public static UtilityClass getInstance(){
       if(instance == null){
           instance = new UtilityClass();
       }
       return instance;
       }
}

您可以从下面的第一项活动设置

UtilityClass.getInstance().setList(list);

从下面的第二项活动中获取此信息,

UtilityClass.getInstance().getList();

答案 2 :(得分:0)

实施parcelable,然后使用意图中的putParcelableArrayListExtra

Intent intent = new Intent(this, NextActivity.class);
intent.putParcelableArrayListExtra(name, arrayList);
startActivity(intent);

要取回arraylist,请使用getIntent().getParcelableArrayListExtra(name)。确保两个名称匹配。

答案 3 :(得分:0)

 public class People implements Parcelable {

         private int mobile_number;
         private String email_id, name;
         private Testimony[] testimony;

  public People(String name, int mobile_number, String email_id, Testimony ... testimony) {
            this.name = name;
            this.mobile_number = mobile_number;
            this.email_id = email_id;
            this.testimony = testimony;
        }

 private People(Parcel in) {
     name = in.readString();
     mobile_number = in.readInt();
     email_id = in.readString();
     testimony = in.readString();

 }

 @Override
 public int describeContents() {
     // TODO Auto-generated method stub
     return 0;
 }

 @Override
 public void writeToParcel(Parcel dest, int flags) {

     dest.writeString(name);
     dest.writeInt(mobile_number);
     dest.writeString(email_id);
     dest.writeString(testimony);

 }

  public static final Parcelable.Creator<People> CREATOR = new Parcelable.Creator<People>() {
         public People createFromParcel(Parcel in) {
             return new People(in);
         }

         public People[] newArray(int size) {
             return new People[size];

         }
     };

    // all get , set method 
  }

这将为您的代码获取和设置:

 Intent intent = new Intent(this,DisplayContact.class);
 intent.putExtra("Contact_list", ContactLis);
 startActivity(intent);

第二课:

 ArrayList<People> myList = getIntent().getParcelableExtra("Contact_list");

答案 4 :(得分:0)

他可以在您的自定义类中实现parcelable接口,然后您可以将此类的arraylist传递给anasteractivity

 public override void OnActionExecuting(
 System.Web.Http.Controllers.HttpActionContext actionContext)
 { }