我一直在寻找一个简单的例子,但没有运气。Android将数组列表传回给父代活动
在我的Android应用程序中,我有两个活动: 1.在启动时启动的主要活动 2.通过按主活动上的按钮启动的第二个活动。
当第二项活动完成时(通过按下按钮),我希望它发回一个类型为MyObject的ArrayList给主活动并关闭自己,然后主活动就可以对它做任何事情。我将如何去实现这一目标?我一直在尝试一些事情,但是当我开始第二个活动时,它正在崩溃我的应用程序。
当用户按压按钮以启动第二活动:
Intent i = new Intent(MainActivity.this, secondactivity.class);
startActivityForResult(i, 1);
其按下按钮在第二活动后捆绑回的阵列:
Intent intent= getIntent();
Bundle b = new Bundle();
b.putParcelableArrayList("myarraylist", mylist);
intent.putExtras(b);
setResult(RESULT_OK, intent);
finish();
最后在主收听者活动(虽然我不确定此代码启动时100%...)
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode==RESULT_OK && requestCode==1){
Bundle extras = data.getExtras();
final ArrayList<MyObject> mylist = extras.getParcelableArrayList("myarraylist");
Toast.makeText(MainActivity.this, mylist.get(0).getName(), Toast.LENGTH_SHORT).show();
}
}
我有什么想法会出错? onActivityResult()似乎崩溃了我的应用程序。
编辑:类具有parcelable方法:
import android.os.Parcel;
import android.os.Parcelable;
public class Plan implements Parcelable{
private String name;
private String id;
public Plan(){
}
public Plan createFromParcel(Parcel in) {
Plan plan = new Plan();
plan.setId(in.readString());
plan.setName(in.readString());
return plan;
}
public Plan(String name, String id){
this.name = name;
this.id = id;
}
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
public String getId(){
return id;
}
public void setId(String id){
this.id = id;
}
public String toString(){
return "Plan ID: " + id + " Plan Name: " + name;
}
@Override
public int describeContents() {
// TODO Auto-generated method stub
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(id);
dest.writeString(name);
}
public static final Parcelable.Creator<Plan> CREATOR
= new Parcelable.Creator<Plan>() {
public Plan createFromParcel(Parcel in) {
return new Plan();
}
@Override
public Plan[] newArray(int size) {
// TODO Auto-generated method stub
return new Plan[size];
}
};
}
第二活动结束后,onactivityresult被调用,但没有显示敬酒,它的空白内。有任何想法吗?我猜我的课还是搞砸了......
编辑:得到它的工作
我不得不说彼得在错误的地方提供的方法。它应该在里面的创造者,像这样:
public static final Parcelable.Creator<Plan> CREATOR
= new Parcelable.Creator<Plan>() {
public Plan createFromParcel(Parcel in) {
Plan plan = new Plan();
plan.setId(in.readString());
plan.setName(in.readString());
return plan;
}
而不是自己。
非常感谢彼得!希望这可以帮助别人。
您能否提供一些Logcat输出?此外,你说*开始*第二个活动崩溃你的应用程序。会不会有另一个问题? – Shade 2011-03-05 23:44:27
已被添加到主标题 – 2011-03-06 00:08:39