【发布时间】:2017-12-09 08:12:12
【问题描述】:
我正在使用 arrayList 填充我的 recyclerView,具体取决于所选项目和休息服务调用。问题是,起初对于默认选择的项目,它被正确填充,但是当我选择另一个项目来获取它的数据时,事情变得很奇怪:它获取列表就像我保持前一个项目被选中一样,它没有得到同步,我检查了选择是否被传递给其余的 web 服务以带回正确的数据。有什么想法吗?
这是我的代码:
facturelist=new ArrayList<>();
Toast.makeText(getActivity().getApplicationContext(),"fac Ond"+ondSel, Toast.LENGTH_SHORT).show();
apiService = RestService.createService(SolarAPIService.class);
Call<List<ListFacture>> call = apiService.listFactureStringDate(ondSel);
call.enqueue(new Callback<List<ListFacture>>() {
@Override
public void onResponse(Call<List<ListFacture>> call, retrofit2.Response<List<ListFacture>> response) {
try {
for (ListFacture fac : response.body()) {
facturelist.add(fac);
factureAdapter.notifyDataSetChanged();
}
Collections.sort(facturelist, new Comparator<ListFacture>() {
public int compare(ListFacture o1, ListFacture o2) {
if (o1.getDateDebut() == null || o2.getDateDebut() == null)
return 0;
return o2.getDateDebut().compareTo(o1.getDateDebut());
}
});
Toast.makeText(getActivity().getApplicationContext(),"facture List"+facturelist.size(), Toast.LENGTH_SHORT).show();
factureAdapter.notifyDataSetChanged();
recyclerView.setAdapter(factureAdapter);
recyclerLay.setVisibility(View.GONE);
slideDown= AnimationUtils.loadAnimation(getActivity().getApplicationContext(),R.anim.slide_up);
recyclerLay.startAnimation(slideDown);
recyclerLay.setVisibility(View.VISIBLE);
progress.setVisibility(View.GONE);
}catch (NegativeArraySizeException nx){
progress.setVisibility(View.GONE);
layoutFactures.setVisibility(View.GONE);
notFound.setVisibility(View.VISIBLE);
errorNotFound.setText(R.string.onduleur_alerts_404);
}
}
@Override
public void onFailure(Call<List<ListFacture>> call, Throwable t) {
Log.e("Error",t.getMessage());
Toast.makeText(getActivity().getApplicationContext(),"facture List"+t.getStackTrace(), Toast.LENGTH_SHORT).show();
}
});
}
看起来factureList 保持之前的状态。
【问题讨论】:
-
您的适配器在哪里初始化?如果
response.body()已经是一个列表,为什么还要循环它?不要为列表中的每个元素调用notifyDataSetChanged()。尤其是当您没有更改任何内容时(数据集是您的facturelist并且尚未设置为您的适配器)您应该检查整个代码,因为有很多问题!
标签: java android arraylist android-recyclerview