ArrayList 和 Parcelable
ArrayList and Parcelable
我需要 "transfer" 一个自定义的 ArrayList class 从一个实体到另一个实体。我知道我需要实现 Parcelable 接口。
这是我的习惯class。
public class cSportsList implements Parcelable {
boolean checked;
String name;
cSportsList(boolean check, String name_) {
checked = check;
name = name_;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
//Non posso passare un booleano e non posso fare il cast boolean -> int
if (checked) {
dest.writeInt(1);
}
else dest.writeInt(0);
dest.writeString(name);
}
public static final Parcelable.Creator<cSportsList> CREATOR = new Parcelable.Creator<cSportsList>() {
public cSportsList createFromParcel(Parcel in) {
return new cSportsList(in);
}
public cSportsList[] newArray(int size) {
return new cSportsList[size];
}
};
private cSportsList(Parcel in) {
if (in.readInt() == 1) {
checked = true;
}
else {
checked = false;
}
name = in.readString();
}
}
这是实体中的代码 "from"
//This is sportsMap: ArrayList<cSportsList> sportsMap = new ArrayList<cSportsList>();
Intent intent = new Intent(getApplicationContext(),WhatSportActivity.class);
intent.putParcelableArrayListExtra("sportsMap", (ArrayList<? extends Parcelable>) sportsMap); //I have tried with ArrayList<cSportsList> too.
this.startActivity(intent);
这是实体中的代码 "to"
final Intent srcIntent = getIntent();
ArrayList<cSportsList> sportsMap = srcIntent.getParcelableExtra("sportsMap");
问题是:实体 "To" sportsMap 为空。
如果我在 "writeToParcel" 和 "cSportsList(Parcelable in)" 函数中设置 "breakpoint",我会看到代码针对这两个函数执行。
我的错误在哪里?
谢谢。 M.
阅读时需要使用
srcIntent.getParcelableArrayListExtra("sportsMap");
在下面的代码中使用Intent
intent.putParcelableArrayListExtra("sportsMap", sportsMap);
要从意图中读取它,请使用
ArrayList<cSportsList> sportsMap = srcIntent.getParcelableArrayListExtra("sportsMap");
在 Pass ArrayList<? implements Parcelable> to Activity
阅读类似的解决方案
你应该使用:
ArrayList<cSportsList> sportsMap = srcIntent.getParcelableArrayListExtra("sportsMap");
您也可以使用序列化。
public class cSportsList implements Serializable
放:
intent.putExtra("LIST",list);
获得:
(ArrayList<>)intent.getSerializableExtra("LIST");
使用下面的代码
sportsMap = srcIntent.getParcelableArrayListExtra("sportsMap");
尝试传递 Arraylist 而不是像这样转换它:
Intent intent = new Intent(getApplicationContext(),WhatSportActivity.class);
intent.putParcelableArrayListExtra("sportsMap", sportsMap);
startActivity(intent);
在 WhatSportActivity 中,
final Intent srcIntent = getIntent();
ArrayList<cSportsList> sportsMap = srcIntent.getParcelableExtra("sportsMap");
如果您仍有问题,请尝试使用 "Parceable" 插件实现 Parceable,因为它减少了使用 Parceable 列表时的错误。
我需要 "transfer" 一个自定义的 ArrayList class 从一个实体到另一个实体。我知道我需要实现 Parcelable 接口。
这是我的习惯class。
public class cSportsList implements Parcelable {
boolean checked;
String name;
cSportsList(boolean check, String name_) {
checked = check;
name = name_;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
//Non posso passare un booleano e non posso fare il cast boolean -> int
if (checked) {
dest.writeInt(1);
}
else dest.writeInt(0);
dest.writeString(name);
}
public static final Parcelable.Creator<cSportsList> CREATOR = new Parcelable.Creator<cSportsList>() {
public cSportsList createFromParcel(Parcel in) {
return new cSportsList(in);
}
public cSportsList[] newArray(int size) {
return new cSportsList[size];
}
};
private cSportsList(Parcel in) {
if (in.readInt() == 1) {
checked = true;
}
else {
checked = false;
}
name = in.readString();
}
}
这是实体中的代码 "from"
//This is sportsMap: ArrayList<cSportsList> sportsMap = new ArrayList<cSportsList>();
Intent intent = new Intent(getApplicationContext(),WhatSportActivity.class);
intent.putParcelableArrayListExtra("sportsMap", (ArrayList<? extends Parcelable>) sportsMap); //I have tried with ArrayList<cSportsList> too.
this.startActivity(intent);
这是实体中的代码 "to"
final Intent srcIntent = getIntent();
ArrayList<cSportsList> sportsMap = srcIntent.getParcelableExtra("sportsMap");
问题是:实体 "To" sportsMap 为空。 如果我在 "writeToParcel" 和 "cSportsList(Parcelable in)" 函数中设置 "breakpoint",我会看到代码针对这两个函数执行。
我的错误在哪里?
谢谢。 M.
阅读时需要使用
srcIntent.getParcelableArrayListExtra("sportsMap");
在下面的代码中使用Intent
intent.putParcelableArrayListExtra("sportsMap", sportsMap);
要从意图中读取它,请使用
ArrayList<cSportsList> sportsMap = srcIntent.getParcelableArrayListExtra("sportsMap");
在 Pass ArrayList<? implements Parcelable> to Activity
阅读类似的解决方案你应该使用:
ArrayList<cSportsList> sportsMap = srcIntent.getParcelableArrayListExtra("sportsMap");
您也可以使用序列化。
public class cSportsList implements Serializable
放:
intent.putExtra("LIST",list);
获得:
(ArrayList<>)intent.getSerializableExtra("LIST");
使用下面的代码
sportsMap = srcIntent.getParcelableArrayListExtra("sportsMap");
尝试传递 Arraylist 而不是像这样转换它:
Intent intent = new Intent(getApplicationContext(),WhatSportActivity.class);
intent.putParcelableArrayListExtra("sportsMap", sportsMap);
startActivity(intent);
在 WhatSportActivity 中,
final Intent srcIntent = getIntent();
ArrayList<cSportsList> sportsMap = srcIntent.getParcelableExtra("sportsMap");
如果您仍有问题,请尝试使用 "Parceable" 插件实现 Parceable,因为它减少了使用 Parceable 列表时的错误。