Java 在活动之间传递多个对象(使用parcelable)
所以我要做的是将ObjectB从第一个活动传递到第二个活动。ObjectB包含另一个对象ObjectA。对于如何实现这一点,我感到非常困惑。另外,我在ObjectA中使用了一个列表,因为我将有多个整数值,而不是本例中的1。以下是第一项活动:Java 在活动之间传递多个对象(使用parcelable),java,android,Java,Android,所以我要做的是将ObjectB从第一个活动传递到第二个活动。ObjectB包含另一个对象ObjectA。对于如何实现这一点,我感到非常困惑。另外,我在ObjectA中使用了一个列表,因为我将有多个整数值,而不是本例中的1。以下是第一项活动: private ObjectB objB; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
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);
}
第二项活动:
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);
}
对象B的类:
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];
}
};
}
对象A的类:
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];
}
};
}
公共类ObjectA实现了Parcelable{
公共int stage1计数=1;
公共对象a(){;};
公共物体A(包裹内){
从包裹中读取;
}
@凌驾
公共int描述内容(){
返回0;
}
@凌驾
公共无效写入包裹(包裹目的地,内部标志){
List iList=new ArrayList();
添加(阶段1计数);
目的写入列表(iList);
}
private void readFromParcel(地块位于中){
List iList=new ArrayList();
iList=in.readArrayList(Integer.class.getClassLoader());
stage1Count=iList.get(0);
}
公共静态最终包裹。创建者=
新建Parcelable.Creator(){
公共对象A createFromParcel(中的地块){
返回新的ObjectA(in);
}
公共对象A[]新数组(整数大小){
返回新的ObjectA[size];
}
};
}
这是一个非常愚蠢的问题,但我在很长一段时间后才明白,哈哈。问题是tv.setText(objB.obj.stage1Count)代码>因为objB.obj.stage1Count实际上是一个整数,但由于某些原因,当您尝试将其用作字符串时,它不会发出任何响声,idk可能与包裹有关。请在第一个活动中尝试以下操作:
List<ObjectB> list = new ArrayList<ObjectB>;
intent.putParcelableArrayListExtra("key", list);
List List=newarraylist;
意图。putParcelableArrayListExtra(“键”,列表);
在第二个活动中
List<ObjectB> list = new ArrayList<ObjectB>;
list = bundle.getParcelableArrayList("key");
List List=newarraylist;
列表=bundle.getParcelableArrayList(“键”);
从列表中获取您的objectB