Как разобрать List<doube> в связке от фрагмента к фрагменту?

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

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

0
0
55
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

вы не можете сделать 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);

вам следует реорганизовать код selectedItem.getDataSet(), чтобы он возвращал список MyDouble вместо списка double

Alon Aviram 10.06.2019 23:34

мои расчетные данные находятся в Double[], поэтому я пытаюсь изменить их на List<Double> здесь вырезанный код моих данных, ibb.co/pRy4N0d, так как мне это решить? если я использую MyDouble, он сказал, что требуется Double. Я не могу изменить его на MyDouble, потому что opencv не предоставил объект, просто предоставил Double

Appem 10.06.2019 23:45

добавьте этот код после получения набора данных: 'List<MyDouble> myDoubles = new ArrayList<>(); for (Double d: selectedDataset) {myDoubles.add(new MyDouble(d)); }' и: 'bundle.putParcelableArrayList("DataSet", myDoubles);'

Alon Aviram 10.06.2019 23:58

d дает мне ошибку, не может быть применен к java.lang.DOuble

Appem 11.06.2019 00:02

Давайте продолжить обсуждение в чате.

Alon Aviram 11.06.2019 00:05

Его работа, но как я могу получить данные из фрагмента B?

Appem 11.06.2019 22:38

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

class DoubleWrapper implements Serializable {
  double value;
}

как я могу использовать этот класс?

Appem 11.06.2019 20:39
bundle.putSerializable()
Shadkirill 12.06.2019 14:28

Другие вопросы по теме