关于android:如何将自定义对象的arraylist从一个java类传递给另一个?

How do I pass arraylist of a custom object from one java class to another?

本问题已经有最佳答案,请猛点这里访问。

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

这是我的自定义对象:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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的代码:

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

这里"列表"指的是Arraylist


SerializableParcelable不是一回事,尽管它们的用途相同。这篇文章包含Parcelable对象的一个??例子。

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

Parcelable

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
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应该很简单

列出额外的

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

额外获取清单

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

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


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

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

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

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

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