[英]Passing arraylist of object between fragments throwing error using safe args
我正在開發一個應用程序,我需要將 ArrayList model object 傳遞給下一個片段,但它會拋出錯誤。 我嘗試了很多文件,但沒有任何效果請指導我為什么會這樣。我正在通過 firebase 檢索數據,並想在我的 recyclerview 適配器上設置這個 ArrayList。 我怎樣才能做到這一點?? 請指導我
來自片段 A 的代碼
ArrayList<RecyclerviewModel> mydatalist = new ArrayList<>();
HomeFragmentDirections.ActionHomeToSearchDataFragment dr = HomeFragmentDirections.actionHomeToSearchDataFragment(mydatalist);
Navigation.findNavController(view).navigate(dr);
來自片段 B 的代碼(接收片段)
ArrayList<RecyclerviewModel> mylist;
if (getArguments()!=null)
{
SearchDataFragmentArgs args = SearchDataFragmentArgs.fromBundle(getArguments());
mylist = args.getMylist();
adapter = new SearchRecycleAdapter(mylist, getContext());
binding.searchDataRecyclerview.setAdapter(adapter);
}
MODEL CLASS
public class RecyclerviewModel implements Parcelable {
String name;
String email;
String desc;
String book;
List<String> images;
String uid;
String searching;
public RecyclerviewModel() {
}
public RecyclerviewModel(String name, String email, String desc, String book, List<String> images, String uid,String searching) {
this.name = name;
this.email = email;
this.desc = desc;
this.book = book;
this.images= images;
this.uid = uid;
this.searching = searching;
}
protected RecyclerviewModel(Parcel in) {
name = in.readString();
email = in.readString();
desc = in.readString();
book = in.readString();
images = in.createStringArrayList();
uid = in.readString();
searching = in.readString();
}
public static final Creator<RecyclerviewModel> CREATOR = new Creator<RecyclerviewModel>() {
@Override
public RecyclerviewModel createFromParcel(Parcel in) {
return new RecyclerviewModel(in);
}
@Override
public RecyclerviewModel[] newArray(int size) {
return new RecyclerviewModel[size];
}
};
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public String getBook() {
return book;
}
public void setBook(String book) {
this.book = book;
}
public List<String> getImages() {
return images;
}
public void setImages(List<String> images) {
this.images = images;
}
public String getUid() {
return uid;
}
public void setUid(String uid) {
this.uid = uid;
}
public String getSearching() {
return searching;
}
public void setSearching(String searching) {
this.searching = searching;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel parcel, int i) {
parcel.writeString(name);
parcel.writeString(email);
parcel.writeString(desc);
parcel.writeString(book);
parcel.writeStringList(images);
parcel.writeString(uid);
parcel.writeString(searching);
}
}
error: incompatible types: ArrayList<RecyclerviewModel> cannot be converted to RecyclerviewModel
您應該創建另一個空的 class,它擴展 ArrayList,如下所示:
@Parcelize
public class RecyclerModels extends ArrayList<RecyclerViewModels> implements Parcelable
然后將導航參數的類型設置為此 class。
<argument
android:name="mylist"
app:argType="your.package.RecyclerModels"/>
你的RecyclerViewModel
也應該是Parcelable
如果你不知道,你正試圖在某個地方做這樣的事情:
ArrayList<RecyclerviewModel> arr=...;
RecyclerviewModel rm=arr;
所以,再次檢查你的代碼。≈≈
您可以使用 class 和接口來傳遞數據(這不是最好的方法,但我使用它)
public class Helper{
public static Sender sender;
interface Sender {
public void Send(Object object);
}
}
在片段 2(接收者)中:
Helper.sender = new Helper.Sender(){
public void Send(Object ob){
//What it should do on recieve ?
//e.g : RecyclerviewModel r=(RecyclerviewModel)ob;
}
}
在片段 1(發件人)中:
//example:
Helper.sender.Send(RecyclerviewModel);
我希望這能幫到您:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.