Android: 使用Parcelable将自定义对象的ArrayList从Fragment发送到Activity

3
我在让这个工作上遇到了问题: 1)我有一个自定义类,实现了Parcelable接口:
public class CityCoordinates implements Parcelable {

private double latitude;
private double longitude;

public double getLatitude() {
    return latitude;
}

public void setLatitude(double latitude) {
    this.latitude = latitude;
}

public double getLongitude() {
    return longitude;
}

public void setLongitude(double longitude) {
    this.longitude = longitude;
}

public CityCoordinates(double latitude, double longitude) {
    this.latitude = latitude;
    this.longitude = longitude;
}

public CityCoordinates(Parcel in) {
    latitude = in.readDouble();
    longitude = in.readDouble();
}

public int describeContents() {
    return 0;
}

public void writeToParcel(Parcel dest, int flags) {
    dest.writeDouble(latitude);
    dest.writeDouble(longitude);
}

public static final Parcelable.Creator<CityCoordinates> CREATOR = new Parcelable.Creator<CityCoordinates>() {

    public CityCoordinates createFromParcel(Parcel in) {
        return new CityCoordinates(in);
    }

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

};

2)我有一个包含ArrayList listItems的片段,我想将其发送到另一个活动:
ArrayList<CityCoordinates> listItems = new ArrayList<>();
...
Intent intent = new Intent(getActivity(), MapActivity.class);
            intent.putParcelableArrayListExtra("key", listItems);
            startActivity(intent);

3)这是我在启动的活动中检索ParcelableArrayListExtra的方法:
public class MapActivity extends ActionBarActivity {
...
ArrayList<CityCoordinates> cityCoordinatesList = getIntent().getParcelableArrayListExtra("key");

当我尝试检索额外信息时,我遇到了NullPointerException。我做错了什么?谢谢你的帮助!

代码看起来不错,你能发一下异常堆栈跟踪吗? - mdelolmo
我解决了我的问题。我试图在活动的onCreate之外检索额外的内容。我将它移动到onCreate内部,现在它可以工作了!抱歉让您浪费时间在这种愚蠢的事情上。 - Vito Banovac
2个回答

0
为了从意图中检索额外信息,我应该在活动的onCreate方法内完成。
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.fragment_map_main);
...
    ArrayList<CityCoordinates> cityCoordinatesList = getIntent().getParcelableArrayListExtra("key");
...

0
我建议定义一个接口,让主活动实现它。将该引用传递给片段。当您想要发送数据时,只需通过接口传递它并删除片段。这将节省一些时间。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接