【问题标题】:RecyclerView List not correct displayed ArrayListRecyclerView List 不正确显示的 ArrayList
【发布时间】: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


【解决方案1】:

您正在为新请求之前为fractureList 创建新实例,但您没有更改适配器中的实例(或其内容)。

您应该将适配器中的列表更改为新实例或从头开始重新创建适配器。

【讨论】:

  • 谢谢,我真的修好了,就像你说我在调用我的 rest wbservice 之前将我的列表添加到适配器,所以它保留了旧版本的数据。
猜你喜欢
  • 1970-01-01
  • 2016-08-17
  • 1970-01-01
  • 2021-01-10
  • 1970-01-01
  • 1970-01-01
  • 2018-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多