簡體   English   中英

如何通過名單 <custom object> 通過活動

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM