Как разобрать List <doube>в связке от фрагмента к фрагменту? - PullRequest
0 голосов
/ 06 июня 2019

Я хотел бы проанализировать данные из фрагмента 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>

как я могу решить это?

Ответы [ 2 ]

1 голос
/ 06 июня 2019

вы не можете сделать Double Parcelable, но вы можете создать класс, который содержит ваш double и реализовать Parcelable в этом классе:

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);
0 голосов
/ 06 июня 2019

Или вы можете создать класс Serializable:

class DoubleWrapper implements Serializable {
  double value;
}
...