[英]How to pass List<custom object> through activities
ArrayList<Item> arrayOfList;
我想通過arrayOfList;
到listview
Itemclick
的下一個活動
試過的東西
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);
但是我在控制台中得到的是null
。
還有其他有效的方式來傳遞數據。
Item.java
公共類Item實現了Parcelable {
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
也不可Serializable
。 我不想對此進行任何更改。
您應該使您的Item
實現為Parcelable
。 試試這個網站 ,使您的Item
Parcelable
Item既不可打包也不可序列化。 我不想對此進行任何更改。
那你做不到 我強烈建議您查看Parcelable
界面, 避免使用諸如將字段設為public static
類的技巧
就像其他人所說的,如果不實現可打包,您將無法正確執行-有時是不可能的。
您唯一的選擇是設計一種方法,您可以將列表放在靜態上下文中,以便可以從任何地方訪問它。
您可以創建一個單例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;
}
}
顯然,當您傳遞事物時,這將以巨大的內存泄漏結束,並且新活動不會使它們退出。 所有替代方案都有缺點,需要仔細管理以減少不可避免的問題。
您嘗試以下
intent.putParcelableArrayListExtra("key", ArrayList<T extends Parcelable> list);
startActivity(intent);
取回
getIntent().getParcelableArrayListExtra("key");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.