我正在寻找解决方案来解决无法重新设置我的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()作为我在此方法中的评论代码,它的工作原理,但我不想它。任何解决方案帮助我。
看,你直接把response.body()作为一个对象放到适配器中,所以它是如何显示的!取而代之的是,检查你的JSON响应,从响应中获取InVoiceItem列表,然后应用到适配器 – MrCurious
我的json返回我的正确数据,并获取我的正确对象。 –
可以请您发布您的POJO课程 – MrCurious