Лучший способ сделать это, если вы можете выразить свои данные в примитивах, поддерживаемых Bundle, так что они могут быть помещены в намерение, которое вы отправляете через методы Intent.putExtra ().(За исключением использования Serializable, который очень медленный и неэффективный.)
Однако вы не можете сделать это, потому что (a) вы используете карту и (b) ваша карта содержит пользовательский тип данных.
Формально правильное решение этой точной проблемы состоит в написании пользовательского класса Parcellable, который заботится о маршалинге / демаршаллинге вашей структуры данных.Я набросаю код здесь, хотя он может быть не совсем корректным:
import android.os.Parcel;
import android.os.Parcelable;
import android.os.Parcelable.Creator;
public class MyData implements Parcelable {
HashMap<String, data> data_map = new HashMap<String, data>();
public MyData() {
}
public int describeContents() {
return 0;
}
public void writeToParcel(Parcel dest, int parcelableFlags) {
final int N = data_map.size();
dest.writeInt(N);
if (N > 0) {
for (Map.Entry<String, data> entry : data_map.entrySet()) {
dest.writeString(entry.getKey());
data dat = entry.getValue();
dest.writeString(dat.name);
dest.writeFloat(dat.value);
// etc...
}
}
}
public static final Creator<MyData> CREATOR = new Creator<MyData>() {
public MyData createFromParcel(Parcel source) {
return new MyData(source);
}
public MyData[] newArray(int size) {
return new MyData[size];
}
};
private MyData(Parcel source) {
final int N = source.readInt();
for (int i=0; i<N; i++) {
String key = source.readString();
data dat = new data();
dat.name = source.readString();
dat.value = source.readFloat();
// etc...
data_map.put(key, dat);
}
}
}
Обратите внимание, что когда у вас есть пользовательская структура данных, например, ваш класс «data», может быть проще сделать этоParcellable, поэтому он знает, как читать / записывать свое содержимое в Parcel, и код здесь будет просто вызывать .writeToParcel (...) и метод .readFromParcel (...), а не знать подробности его содержимого.,Таким образом, когда вы добавляете новые поля в «data», вы не забываете также обновить этот другой код сортировки, чтобы узнать о них.