如何将自定义对象的arraylist从一个java类传递到另一个java类?

时间:2016-03-24 08:23:31

标签: android arraylist

我有Arraylist个自定义对象。我试图将它从一个java文件传递到另一个。我尝试了putExtra方法和Parcelable选项;但我无法理解Parcelable

这是我的自定义对象:

public class AddValues implements Serializable{
    public int id;
    String value;

    public AddValues(int id, String value)
    {
        this.id = id;
        this.value = value;
    }

    @Override
    public String toString() {
        String result = "id = "+id+","+" value = "+value;
        return result;
    }

    public  int getid()
    {
        return  this.id;
    }

    public String getvalue()
    {
        return this.value;
    }
}

这是发送ArrayList的代码:

Intent intent = new Intent(BluetoothLeService.this,HomePageFragment.class);
intent.putExtra("id", data_id);
intent.putExtra("value", list);

这里"列表"是指ArrayList

2 个答案:

答案 0 :(得分:3)

SerializableParcelable不是一回事,尽管它们的目的相同。此post包含Parcelable对象的示例。

对于您要创建的所有Parcelable对象,应遵循使用的模式,仅更改writeToParcelAddValues(Parcel in)方法。这两种方法应该相互映射,如果writeToParcelint然后写string,构造函数应该读int然后string

Parcelable

public class AddValues implements Parcelable{
    private int id;
    private String value;

    // Constructor
    public AddValues (int id, String value){
        this.id = id;
        this.value= value;
   }

   // Parcelling part
   public AddValues (Parcel in){
       this.id = in.readInt();
       this.value= in.readString();
   }

   @Override
    public int describeContents() {
        return 0;
    }

   @Override
   public void writeToParcel(Parcel dest, int flags) {
       dest.writeInt(id);
       dest.writeString(value);
   }

   public final Parcelable.Creator CREATOR = new Parcelable.Creator() {
       public AddValues createFromParcel(Parcel in) {
           return new AddValues(in); 
       }

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

}

将列表添加到Intent extra应该很简单

额外列出

ArrayList<AddValue> list = new ArrayList<>();
Intent intent = new Intent(BluetoothLeService.this,HomePageFragment.class);
intent.putExtra("arg_key", list);

获取额外列表

ArrayList<AddValues> list = (ArrayList<AddValues>) intent.getSerializableExtra("arg_key");

另外,您可以使用Pair<Integer, String>对象而不是创建AddValues对象。这并不会影响答案,但可能很高兴知道。

答案 1 :(得分:1)

您可以使用putExtra("key", Serializable value)方法的Intent#putExtra()变体在intent extra中传递对象实例,您已在此处执行此操作。

Intent intent = new Intent(BluetoothLeService.this,HomePageFragment.class);
intent.putExtra("id", data_id);
intent.putExtra("value", list);

现在,要在其他活动中获取此数据,您需要使用getSerializableExtra("key")方法。

list = getIntent().getSerializableExtra("value");

但是如果你想使用Parcelable,请参阅@kevins回答。