[英]Add objects to an arraylist from within inner class
我正在编写一个应用程序,使用回调函数从我的在线数据库中获取数据到我的fragment
的RecyclerView
。 正如您将在下面的代码中看到的那样,我试图显示负责我最终结果的所有相关代码片段。 如果您需要更多信息,请询问我是否可以提供。
这是一个名为Question.java的类
public class Question {
public Integer postid;
public String title;
public String content;
public String tags;
public String created;
}
然后是回调类: CallbackQuestions.java
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import com.example.myapp;
public class CallbackQuestions implements Serializable{
public int total = -1;
public List<Question> data = new ArrayList<>();
}
我的ItemModel类: ItemModel.java
public class ItemModel {
private String Title;
private String Description;
private String Tags;
private String Created;
public ItemModel(String Title, String Description, String Tags, String Created) {
this.Title = Title;
this.Description = Description;
this.Tags = Tags;
this.Created = Created;
}
public String getCreated() {
return Created;
}
public void setCreated(String Created) {
this.Created = Created;
}
public String getTitle() {
return Title;
}
public void setTitle(String Title) {
this.Title = Title;
}
public String getDescription() {
return Description;
}
public void setDescription(String Description) {
this.Description = Description;
}
public String getTags() {
return Tags;
}
public void setTags(String Tags) {
this.Tags = Tags;
}
}
然后最后这里让我很头疼让它工作的是ListingModel.java
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
ListingModel listingModel = mArrayList.get(position);
((NormalViewHolder) holder).tv_card_header.setText(mArrayList.get(position).getHeader());
((NormalViewHolder) holder).listing_recycler_view.setHasFixedSize(true);
RecyclerView.LayoutManager normalLayoutManager = new LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false);
((NormalViewHolder) holder).listing_recycler_view.setLayoutManager(normalLayoutManager);
ArrayList<ItemModel> list = loadQuestionsList();
ItemAdapter itemAdapter = new ItemAdapter(list);
((NormalViewHolder) holder).listing_recycler_view.setAdapter(itemAdapter);
Log.d("MyAdapter", "position: " + position);
}
public ArrayList<ItemModel> loadQuestionsList() {
final ArrayList<ItemModel> mArrayList = new ArrayList<>();
int start = 0;
String sort = "recent";
API api = CallJson.callJson();
Call<CallbackPosts> callbackQuestionsCall = api.QuestionsAll(BaseUrlConfig.RequestLoadMore, start, sort);
callbackQuestionsCall.enqueue(new Callback<CallbackQuestions>() {
@Override
public void onResponse(Call<CallbackQuestions> call, Response<CallbackQuestions> response) {
CallbackQuestions callbackQuestions = response.body();
for (QuestionsAll thisQuestion : callbackQuestions.data){
mArrayList.add(new ItemModel(thisQuestion.Title, thisQuestion.Description, thisQuestion.Tags, thisQuestion.Created));
}
myArrayList = mArrayList;
}
@Override
public void onFailure(Call<CallbackQuestions> call, Throwable t) {
if (!call.isCanceled());
}
});
return myArrayList;
}
问题是尽管按日志成功运行了回调,但我的ArrayLists
根本没有返回任何内容。 我非常感谢你的帮助。
我想我同意你之前的评论,你的函数将总是返回一个空列表。 异步调用不起作用。 没有回报价值。
不要在ListingModel中进行API调用。 首先获取数据。 然后将其传递给ListingModel。 您可以使用update()方法接收获取的项目列表,并强制刷新ListingModel。
在ItemAdapter上创建一个方法来设置列表并通过调用notifyDataSetChanged()通知适配器刷新; 如果获取的列表不为空,则在成功响应中调用该方法。 即itemAdapter.setList(myArrayList)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.