如何从片段到片段解析捆绑包中的 List<doube>?

How to parse List<doube> in bundle from fragment to fragment?

我想从片段A解析数据到片段B,但唯一的问题是,我要解析的数据是一个列表。

这是一些代码

  @Override
 public void OnEditItem(int position) {
    simpleActivity.toastMessage(context, "Edit Image : "+ position);
    Model selectedItem = mModel.get(position);
    final String selectedKey = selectedItem.getKey();
    final String selectedImage = selectedItem.getImagesUri();
    final String selecteDescriptions = selectedItem.getImageDescription();
    final String selectedImagesName = selectedItem.getImageNames();
    final List<Double> selectedDataset = selectedItem.getDataSet();

    InputFragment inputFragment = new InputFragment();
    Bundle bundle = new Bundle();
    bundle.putString("Label", selectedKey);
    bundle.putString("Image", selectedImage);
    bundle.putString("Descriptions", selecteDescriptions);
    bundle.putString("ImagesName", selectedImagesName);
    bundle.putParcelableArrayList("DataSet", selectedDataset);//this is where i got an error

    inputFragment.setArguments(bundle);
}

我遇到了这样的错误

Wrong 2nd argument type.Found 'java.util.ArrayList<Java.lang.Double>', required :'java.util.ArrayList<? extendes android.os.Parcelable>

我该如何解决这个问题?

你不能制作 Double Parcelable,但你可以创建一个包含你的双人的 class 并在其中实施 Parcelable class:

import android.os.Parcel;
import android.os.Parcelable;

public class MyDouble implements Parcelable {
    public double myDouble;
    public MyDouble(double d){
        myDouble = d;
    }

    protected MyDouble(Parcel in) {
        myDouble = in.readDouble();
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeDouble(myDouble);
    }

    @Override
    public int describeContents() {
        return 0;
    }

    public static final Creator<MyDouble> CREATOR = new Creator<MyDouble>() {
        @Override
        public MyDouble createFromParcel(Parcel in) {
            return new MyDouble(in);
        }

        @Override
        public MyDouble[] newArray(int size) {
            return new MyDouble[size];
        }
    };
}

然后你可以像这样使用它:

final List<MyDouble> selectedDataset = selectedItem.getDataSet();
List<MyDouble> myDoubles = new ArrayList<>();
    for (Double d :
            selectedDataset) {
        myDoubles.add(new MyDouble(d));
    }
bundle.putParcelableArrayList("DataSet", myDoubles);

或者您可以创建 class 可序列化:

class DoubleWrapper implements Serializable {
  double value;
}