ArrayList<Item> arrayOfList;
我想将arrayOfList;
传递给Itemclick
的{{1}}上的下一个活动
尝试过的事情
listview
检索arraylist
Intent sec = new Intent(this, IndividualPage.class);
Bundle b = new Bundle();
b.putParcelableArrayList("mylist", arrayOfList);
sec.putExtras(b);
但我在控制台获得了 Bundle b = this.getIntent().getExtras();
ArrayList<Item> cats = b.getParcelableArrayList("mylist");
System.out.println(cats);
。
是否有其他有效的方法来传递数据。
Item.java
public class Item实现了Parcelable {
null
注意: - 项既不是 private String Name;
private String Location;
private String Image;
private String Sector;
private int Founded;
private String Status;
private int RowVAls;
public String getName() {
return Name;
}
public void setName(String Name) {
this.Name = Name;
}
public String getLocation() {
return Location;
}
public void setLocation(String Location) {
this.Location = Location;
}
public String getImage() {
//return "http://23.253.164.20:8099/"+Image;
return "http://23.253.164.20:8099/"+Image;
}
public void setImage(String Image) {
this.Image = Image;
}
public String getSector() {
return Sector;
}
public void setSector(String Sector) {
this.Sector = Sector;
}
public int getFounded() {
return Founded;
}
public void setFounded(int Founded) {
this.Founded = Founded;
}
public String getStatus() {
return Status;
}
public void setStatus(String Status) {
this.Status = Status;
}
public int getRowVAls() {
return RowVAls;
}
public void setRowVAls(int RowVAls) {
this.RowVAls = RowVAls;
}
protected Item(Parcel in) {
Name = in.readString();
Location = in.readString();
Image = in.readString();
Sector = in.readString();
Founded = in.readInt();
Status = in.readString();
RowVAls = in.readInt();
}
@SuppressWarnings("unused")
public static final Parcelable.Creator<Item> CREATOR = new Parcelable.Creator<Item>() {
@Override
public Item createFromParcel(Parcel in) {
return new Item(in);
}
@Override
public Item[] newArray(int size) {
return new Item[size];
}
};
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(Name);
dest.writeString(Location);
dest.writeString(Image);
dest.writeString(Sector);
dest.writeInt(Founded);
dest.writeString(Status);
dest.writeInt(RowVAls);
}
也不是 Parcelable
。
而且我不想对此作出任何改变。
答案 0 :(得分:2)
您应该制作Item
工具Parcelable
。试试这个site即可制作Item
Parcelable
答案 1 :(得分:1)
那时你不能。我强烈建议您查看Item既不是Parcelable也不是Serializable。我不想 做出任何改变。
public static
界面, 避免 技巧,例如制作字段{{1}}
答案 2 :(得分:0)
正如其他人所说的那样,如果没有实现parcelable,你就不能正确 - 这有时是不可能的。
你唯一的选择是设计一种方法,你可以将你的列表放在一个静态的上下文中,这样就可以从任何地方访问它。
您可以创建单个SparseArray和相关整数,并在描述SparseArray中位置的活动之间传递整数。您必须确保增加整数并在抓取后从SparseArray中删除该项。在我的头顶 -
private class ComplexObjectPassing {
private static SparseArray<Object> sArray = new SparseArray<Object>();
private static int count = 0;
public static int putObject(Object obj) {
count++;
sArray.put(count, obj);
}
public static Object getObject(int index) {
Object obj = sArray.get(index);
sArray.put(index, null);
return obj;
}
}
显然,当你传递东西并且没有被新活动拉出来时,这会以巨大的内存泄漏结束。所有替代方案都有缺点,需要谨慎管理,以减少不可避免的问题。
答案 3 :(得分:0)
你试试下面的
intent.putParcelableArrayListExtra("key", ArrayList<T extends Parcelable> list);
startActivity(intent);
检索
getIntent().getParcelableArrayListExtra("key");