我有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
。
答案 0 :(得分:3)
Serializable
和Parcelable
不是一回事,尽管它们的目的相同。此post包含Parcelable对象的示例。
对于您要创建的所有Parcelable对象,应遵循使用的模式,仅更改writeToParcel
和AddValues(Parcel in)
方法。这两种方法应该相互映射,如果writeToParcel
写int
然后写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回答。