我有一个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
。
最佳答案
Serializable
和Parcelable
尽管它们服务于相同的目的,但它们不是同一件事。这个post包含 Parcelable 对象的示例。
您要创建的所有 Parcelable 对象都应遵循所采用的模式,仅更改 writeToParcel
和AddValues(Parcel in)
方法。这两种方法应该互相镜像,如果 writeToParcel
写了一个int
然后是string
,构造函数应该读取 int
然后是string
可打包
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
目的。这不会影响答案,但了解一下可能会很高兴。
关于android - 如何将自定义对象的 arraylist 从一个 java 类传递到另一个 java 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36195825/