2017-08-11 78 views
0

我正在尋找解決方案來解決無法重新設置我的RecyclerView適配器的問題。 通過this回答我已經做了,但沒有工作我做錯了什麼。 這是我設置recyclerView適配器的代碼。RecyclerView notifyDatasetChanged在匿名類方法中notifyDatasetchanged時不起作用

public class OrderedFoodsFragment extends Fragment 
{ 
private NewInvoice invoice; 
private List<InvoiceItem> items= new ArrayList<>(); 
private OrderedAdapter adapter; 
public OrderedFoodsFragment(NewInvoice invoice) 
{ 
    this.invoice = invoice; 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
{ 
    View view = inflater.inflate(R.layout.fragment_ordered_foods, container, false); 
    initializeComponents(view); 
    return view; 
} 

private void initializeComponents(View view) 
{ 
    RecyclerView rvOrderedFoods = (RecyclerView) view.findViewById(R.id.rvOrderedFoods); 
    adapter= new OrderedAdapter(getActivity(), items,R.layout.ordered_layout); 
    rvOrderedFoods.setAdapter(adapter); 
    setInvoiceItems(); 
} 

private void setInvoiceItems() 
{ 
    IInvoiceApi api= ApiClient.getClientWithAuthorization(App.getContext()).create(IInvoiceApi.class); 
    Call<List<InvoiceItem>> call= api.getInvoiceItems(invoice.getId()); 
    call.enqueue(new Callback<List<InvoiceItem>>() 
    { 
     @Override 
     public void onResponse(@NonNull Call<List<InvoiceItem>> call, @NonNull Response<List<InvoiceItem>> response) 
     { 
      if (response.isSuccessful()) 
      { 
       //My comment code 
       //items=response.body(); 
       //adapter= new OrderedAdapter(getActivity(), items,R.layout.ordered_layout); 
       //noinspection ConstantConditions 
       items.clear(); 
       //noinspection ConstantConditions 
       items.addAll(response.body()); 
       adapter.notifyDataSetChanged(); 
       Log.i("InvoiceData", adapter.getItemAtPosition(0).getName()); 
      } 
      else if (response.code() == 401) 
      { 
       new AlertDialog.Builder(getActivity()).setTitle("Session Expire").setMessage("សិទ្ធក្នុងការប្រើកម្មវិធីអស់ពេល").show(); 
       App.promptUnauthorized(getActivity()); 
      } 
      else 
      { 
       items= new ArrayList<>(); 
      } 
     } 

     @Override 
     public void onFailure(@NonNull Call<List<InvoiceItem>> call, @NonNull Throwable t) 
     { 
      call.cancel(); 
     } 
    }); 
} 

} 

我使用的是retrofit 2.0來請求我的數據。 而response.body()有我的數據。但是recyclerview沒有顯示數據。 但是,如果我將onRespose方法中的適配器重新設置爲response.body()作爲我在此方法中的評論代碼,它的工作原理,但我不想它。任何解決方案幫助我。

+0

看,你直接把response.body()作爲一個對象放到適配器中,所以它是如何顯示的!取而代之的是,檢查你的JSON響應,從響應中獲取InVoiceItem列表,然後應用到適配器 – MrCurious

+0

我的json返回我的正確數據,並獲取我的正確對象。 –

+0

可以請您發佈您的POJO課程 – MrCurious

回答

0

您必須將此新列表設置爲適配器。

您可以創建在你的適配器setDataSet()方法調用之前notifydatasetchanged

添加以下方法適配器

public void setDataSet(List<InvoiceItem> items) { 
    this.items= items; 
} 

,並調用它notifydatasetChanged之前是這樣的:

adapter.setDataSet(items); 
adapter.notifyDataSetChanged(); 
+0

它不工作。 –

相關問題