Я хотел бы проанализировать данные из фрагмента 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, но вы можете создать класс, содержащий ваш 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);
мои расчетные данные находятся в Double[], поэтому я пытаюсь изменить их на List<Double> здесь вырезанный код моих данных, ibb.co/pRy4N0d, так как мне это решить? если я использую MyDouble, он сказал, что требуется Double. Я не могу изменить его на MyDouble, потому что opencv не предоставил объект, просто предоставил Double
добавьте этот код после получения набора данных: 'List<MyDouble> myDoubles = new ArrayList<>(); for (Double d: selectedDataset) {myDoubles.add(new MyDouble(d)); }' и: 'bundle.putParcelableArrayList("DataSet", myDoubles);'
d дает мне ошибку, не может быть применен к java.lang.DOuble
Давайте продолжить обсуждение в чате.
Его работа, но как я могу получить данные из фрагмента B?
Или вы можете создать класс Serializable:
class DoubleWrapper implements Serializable {
double value;
}
как я могу использовать этот класс?
bundle.putSerializable()
вам следует реорганизовать код selectedItem.getDataSet(), чтобы он возвращал список MyDouble вместо списка double