繁体   English   中英

在活动之间传递多个对象(使用可拆分)

[英]Passing multiple Objects between activities (using parcelable)

所以我想做的是将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];
            }
        };
}

在第一个活动中尝试:

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

在第二活动中

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

从列表中获取对象B

这是一个非常愚蠢的问题,但是经过很长时间的哈哈,我才知道了。 问题是tv.setText(objB.obj.stage1Count); 因为objB.obj.stage1Count实际上是一个整数,但是由于某些原因,当您尝试将其用作字符串时,它不会响起任何钟声,idk可能与预编码有关。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM