在活动之间传递多个对象(使用parcelable)

时间:2015-09-12 16:49:56

标签: java android

所以我要做的是将ObjectB从第一个活动传递到第二个活动。 ObjectB包含另一个对象ObjectA。我对如何实现这一点感到非常困惑。此外,我在ObjectA中使用一个列表,因为我将有多个整数值而不是本例中的1。这是第一项活动:

private ObjectB objB;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    objB = new ObjectB();
    Intent intent = new Intent(this, SecondActivity.class);
    intent.putExtra("KEY", objB);
    startActivity(intent);
}

和第二项活动:

private ObjectB objB;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_second);
    objB = new ObjectB();
    TextView tv = (TextView) findViewById(R.id.TextView1);
    Bundle b = getIntent().getExtras();
    objB = b.getParcelable("KEY");

    tv.setText(objB.obj.stage1Count);
}

ObjectB的类:

public class ObjectB implements Parcelable{
    public ObjectA obj;

    public ObjectB() { obj = new ObjectA(); }

    public ObjectA getObj() {
        return obj;
    }

    public ObjectB(Parcel in) {
        readFromParcel(in);
    }

    public void setObj(ObjectA obj) {
        this.obj = obj;
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeParcelable(obj, flags);
    }

    private void readFromParcel(Parcel in) {
        obj = in.readParcelable(ObjectA.class.getClassLoader());
    }

    public static final Parcelable.Creator CREATOR =
        new Parcelable.Creator() {
            public ObjectB createFromParcel(Parcel in) {
                return new ObjectB(in);
            }

            public ObjectB[] newArray(int size) {
                return new ObjectB[size];
            }
        };
}

ObjectA的类:

public class ObjectA implements Parcelable{
    public int stage1Count = 1;

    public ObjectA() { ; };

    public ObjectA(Parcel in) {
        readFromParcel(in);
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        List<Integer> iList = new ArrayList<Integer>();

        iList.add(stage1Count);
        dest.writeList(iList);
    }

    private void readFromParcel(Parcel in) {
        List<Integer> iList = new ArrayList<Integer>();

        iList = in.readArrayList(Integer.class.getClassLoader());
        stage1Count = iList.get(0);
    }

    public static final Parcelable.Creator CREATOR =
        new Parcelable.Creator() {
            public ObjectA createFromParcel(Parcel in) {
                return new ObjectA(in);
            }

            public ObjectA[] newArray(int size) {
                return new ObjectA[size];
            }
        };
}

2 个答案:

答案 0 :(得分:1)

在第一项活动中尝试此操作:

List<ObjectB> list = new ArrayList<ObjectB>;    
intent.putParcelableArrayListExtra("key", list);

在第二项活动中

List<ObjectB> list = new ArrayList<ObjectB>;
list = bundle.getParcelableArrayList("key");

从列表中获取您的objectB

答案 1 :(得分:-1)

这是一个非常愚蠢的问题,但经过很长一段时间后我想出来了哈哈。问题是tv.setText(objB.obj.stage1Count);,因为objB.obj.stage1Count实际上是一个整数但是由于某种原因,当你尝试将它用作字符串时它不会响铃,idk可能是它与parceing的东西。