Android:使用 Parcerable 将自定义对象的 ArrayList 从片段发送到 activity
Android: Send ArrayList of custom objects from fragment to activity using Parcerable
我在运行时遇到问题:
1) 我有实现 Parcelable 的自定义 class:
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 的片段,我想发送给另一个 activity:
ArrayList<CityCoordinates> listItems = new ArrayList<>();
...
Intent intent = new Intent(getActivity(), MapActivity.class);
intent.putParcelableArrayListExtra("key", listItems);
startActivity(intent);
3) 这就是我在 activity 中检索 ParcelableArrayListExtra 的方式 我开始:
public class MapActivity extends ActionBarActivity {
...
ArrayList<CityCoordinates> cityCoordinatesList = getIntent().getParcelableArrayListExtra("key");
但是当我尝试检索 extra 时出现 NullPointerException。我做错了什么?感谢您的帮助!
为了从意图中检索额外内容,我应该在 activity 的 onCreate 中这样做。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_map_main);
...
ArrayList<CityCoordinates> cityCoordinatesList = getIntent().getParcelableArrayListExtra("key");
...
我建议定义一个接口并让主要 activity 实现它。将该引用传递给片段。当你想发送数据时,只需通过接口传递它并删除片段。这将节省一些时间
我在运行时遇到问题:
1) 我有实现 Parcelable 的自定义 class:
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 的片段,我想发送给另一个 activity:
ArrayList<CityCoordinates> listItems = new ArrayList<>();
...
Intent intent = new Intent(getActivity(), MapActivity.class);
intent.putParcelableArrayListExtra("key", listItems);
startActivity(intent);
3) 这就是我在 activity 中检索 ParcelableArrayListExtra 的方式 我开始:
public class MapActivity extends ActionBarActivity {
...
ArrayList<CityCoordinates> cityCoordinatesList = getIntent().getParcelableArrayListExtra("key");
但是当我尝试检索 extra 时出现 NullPointerException。我做错了什么?感谢您的帮助!
为了从意图中检索额外内容,我应该在 activity 的 onCreate 中这样做。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_map_main);
...
ArrayList<CityCoordinates> cityCoordinatesList = getIntent().getParcelableArrayListExtra("key");
...
我建议定义一个接口并让主要 activity 实现它。将该引用传递给片段。当你想发送数据时,只需通过接口传递它并删除片段。这将节省一些时间