2017-07-05 28 views
0

選択したアイテムと残りのサービスコールに応じて、私はrecyclerViewにarrayListを設定しています。問題は、まず最初にデフォルトの選択されたアイテムが正しく取り込まれますが、データを取得するために別のアイテムを選択すると、物事が変わってしまいます:前のアイテムを選択したままにしていると、私は、正しいデータを返すために選択肢が残りのWebサービスに渡されていることを確認しました。何か案は ?ここでRecyclerViewリストが正しく表示されませんArrayList

は私のコードです:

 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は、その前の状態を保っているかのように見えます。

+0

アダプタはどこで初期化されていますか? 'response.body()'が既にリストになっている場合、なぜそれをループしますか? リストの各要素に対して 'notifyDataSetChanged()'を呼び出さないでください。特に何も変更していないときは(データセットはあなたのファクトリストです。まだアダプタに設定されていません) 多くの問題があるので、コード全体を確認してください! – Eselfar

答えて

1

新しい要求の前にfractureListの新しいインスタンスを作成していますが、アダプタでインスタンス(またはその内容)を変更していません。

アダプタのリストを新しいインスタンスに変更するか、最初からアダプタを再作成する必要があります。

+0

ありがとう、私は実際にそれを修正しました、あなたは私の残りのデータを保持するように私の残りのwbserviceを呼び出す前にアダプタに私のリストを追加したようだった。 – MeknessiHamida

関連する問題