我正在尝试将其ArrayList<DataField>
作为参数传递给片段,但无法理解应该使用哪种方法。
我正在使用bundle这样将参数发送到Fragment
bundle.putSerializable(Constants.ARRAY_DATA, dataArray);
当我尝试使用以下方法获取Fragment中的参数时
getArguments().getSerializable(Constants.ARRAY_DATA)
我遇到错误
不兼容的类型。必需:java.util.ArrayList找到:java.io.Serializable“
getArguments().getParcelable(Constants.ARRAY_DATA);
没有显示任何错误,但
bundle.putParcelable(Constants.ARRAY_DATA, dataArray);
显示错误
第二个参数类型错误。找到:“ java.util.ArrayList”,必需:“ android.os.Parcelable”
Bundle中的putParcelable(String,android.os.Parcelable)无法应用于(String,java.util.ArrayList)
我应该使用哪种方法通过捆绑包发送“自定义数据字段的数组列表”并使用参数检索它?
通过bundle传递原始数据类型很容易,因为它们具有预定义的方法。只需使用唯一密钥放置数据,然后将其发送到另一个活动或片段。但是,如果用户希望通过捆绑包或意图发送自定义对象,则Data字段类应实现Parcelable接口。
您还可以使用Serializable,Parceler,GSON ...在所有Parcelable中,这是写入和读取对象的最快方法。
在下面,我们将看到Parcelable的实现,最后是如何使用它传递数据。
步骤1:使用Parcelable实现DataField类
public class DataField implements Parcelable {
步骤2:使用方法parcel
内的对象writeToParcel
将所有实例变量保存在DataField类中。
public void writeToParcel(Parcel parcel, int i) {
parcel.writeString(itemName);
parcel.writeString(itemUrl);
}
步骤3:说明文件
实现Parcelable接口的类还必须具有一个称为CREATOR的非空静态字段,该字段的类型应实现Parcelable.Creator接口。
因此,我们需要实现此接口以读取Parcelable。
public static final Creator<DataField> CREATOR = new Creator<DataField>() {
@Override
public DataField createFromParcel(Parcel in) {
return new DataField(in);
}
@Override
public DataField[] newArray(int size) {
return new DataField[size];
}
};
步骤4:看一下方法中的return语句createFromParcel
。我们有DataField(in)
尚未在该类的前面定义的构造函数()。现在,我们将实现此构造函数,并还原我们之前保存的所有数据。
private DataField(Parcel in) {
itemName = in.readString();
itemUrl = in.readString();
}
确保以相同顺序读取所有变量。否则,您最终将在错误的变量中存储错误的值。
第5步:返回活动,只需使用
bundle.putParcelableArrayList(Constants.ARRAY_DATA, dataArray);
步骤6:在片段内部,使用参数和getParcelableArrayList
方法获取数据数组
dataArray = getArguments().getParcelableArrayList(Constants.ARRAY_DATA);
您可以使用相同的过程传递ArrayList<DataField>
经过的意图和putParcelableArrayList
,getParcelableArrayList
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句