![](/img/trans.png)
[英]Getting null while passing data through a bundle from Activity to Fragment
[英]Null bundle when passing from activity to fragment
當嘗試使用捆綁包將自定義 object 從活動傳遞到片段時,當我嘗試在片段中檢索它時,我不斷收到 null 捆綁包。 我正在使用包裹,因為它們是自定義數組列表的唯一選擇。 任何幫助表示贊賞!
為了證明我的 class 是可包裹的:
public class Exercise implements Parcelable{
private String mName;
private String mMuscleGroup;
private String mType;
private String mEquipment;
private float mWeight;
private int mReps;
private int mSet;
public Exercise(String name, String MuscleGroup, String type, String equipment, float weight, int reps, int set) {
mName = name;
mMuscleGroup = MuscleGroup;
mType = type;
mEquipment = equipment;
mWeight = weight;
mReps = reps;
mSet = set;
}
private Exercise(Parcel in) {
mName = in.readString();
mMuscleGroup = in.readString();
mType = in.readString();
mEquipment = in.readString();
mWeight = in.readFloat();
mReps = in.readInt();
mSet = in.readInt();
}
public static final Creator<Exercise> CREATOR = new Creator<Exercise>() {
@Override
public Exercise createFromParcel(Parcel in) {
return new Exercise(in);
}
@Override
public Exercise[] newArray(int size) {
return new Exercise[size];
}
};
public String getName() {
return mName;
}
public String getMuscleGroup() {
return mMuscleGroup;
}
public String getType() {
return mType;
}
public String getEquipment() {
return mEquipment;
}
public float getWeight() { return mWeight; }
public int getReps() { return mReps; }
public int getSet() { return mSet; }
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel parcel, int i) {
parcel.writeString(mName);
parcel.writeString(mMuscleGroup);
parcel.writeString(mType);
parcel.writeString(mEquipment);
parcel.writeFloat(mWeight);
parcel.writeInt(mReps);
parcel.writeInt(mSet);
}
}
'''
我從以下位置傳遞捆綁包的活動:
@Override
protected void onPause() {
// send ArrayList of exercises to WorkoutsFragment
WorkoutsFragment workoutsFragment = new WorkoutsFragment();
Bundle bundle = new Bundle();
bundle.putSerializable("exercise", exercise);
workoutsFragment.setArguments(bundle);
// clear exercise ArrayList
super.onPause();
}
片段接收包:
Bundle bundle = this.getArguments();
if(bundle != null) {
exercise = bundle.getParcelableArrayList("exercise");
}
Model class
public class SomeModelClass implements Serializable {
private String someVar;
public PurchaseData(String someVar) {
this.someVar = someVar;
}
public String getSomeVar() {
return productId;
}
public void setSomeVar(String someVar) {
this.someVar = someVar;
}
}
將其傳遞給 Frag
@Override
protected void onPause() {
// send ArrayList of exercises to WorkoutsFragment
WorkoutsFragment workoutsFragment = new WorkoutsFragment();
Bundle bundle = new Bundle();
bundle.putSerializable("exercise", yourObject);
workoutsFragment.setArguments(bundle);
super.onPause();
}
檢索它
if (getArguments().getSerializable("exercise") != null) {
exercise = (YourObjectClass) getArguments().getSerializable("exercise");
}
您需要使用 bundle.putParcelableArrayList 來放置 Parcelable 列表對象,而不是 putSerializable
如果類型不匹配,你會得到 null
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.