如何通过活动传递List <custom object =“”>

时间:2015-07-22 07:43:54

标签: java android android-intent android-activity

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 。 而且我不想对此作出任何改变。

4 个答案:

答案 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");