android - recycelrview 适配器最后一项在使用改造删除后没有更新,我正在使用接口,因为必须传递产品 ID
问题描述
活动
@Override
protected void onResume() {
super.onResume();
getCartList();
}
private void getCartList() {
showProgressDialog();
Call<List<CartList>> call = api.getCartList(1);
call.enqueue(new Callback<List<CartList>>() {
@Override
public void onResponse(Call<List<CartList>> call, Response<List<CartList>> response) {
cartLists = response.body();
if (cartLists.size() == 0) {
tvCartEmpty.setVisibility(View.VISIBLE);
progressDialog.cancel();
} else {
addToCartAdapter.setData(cartLists);
productList.setAdapter(addToCartAdapter);
progressDialog.cancel();
}
}
@Override
public void onFailure(Call<List<CartList>> call, Throwable t) {
Toast.makeText(AddToCartActivity.this, t.getMessage(), Toast.LENGTH_SHORT).show();
}
});
}
@Override
public void deleteItemID(int id) {
Call<CartList> deleteCall = api.deleteCartItem(id);
deleteCall.enqueue(new Callback<CartList>() {
@Override
public void onResponse(Call<CartList> call, Response<CartList> response) {
Log.d(TAG, "deleteItem by id" + response.code());
onResume();
}
@Override
public void onFailure(Call<CartList> call, Throwable t) {
Log.d(TAG, t.getMessage());
}
});
}
我的意思是即使我在删除项目方法中调用了onresume,最后一个是删除但不是当场更新。我必须再次打开该活动才能看到更新的结果
我希望我能尽快解决我的问题!谢谢,如果你愿意,我会上传接口和适配器代码。我认为这里没有必要。
解决方案
只需在响应类中添加它
public void onResponse(Call<List<CartList>> call, Response<List<CartList>> response) {
cartLists = response.body();
if (cartLists.size() == 0) {
tvCartEmpty.setVisibility(View.VISIBLE);
tvCartItems.setText("0 items");
addToCartAdapter.setData(cartLists);
progressDialog.cancel();
} else {
addToCartAdapter.setData(cartLists);
productList.setAdapter(addToCartAdapter);
tvCartItems.setText(cartLists.size() + " Items");
progressDialog.cancel();
}
}
解决方案
你不需要再次调用 onResume() 。
而不是你应该使用以下代码段:
cartLists.removeAt(id);
addToCartAdapter.notifyDataSetChanged();
您的 deleteItem 函数如下所示:
@Override
public void deleteItemID(int id) {
Call<CartList> deleteCall = api.deleteCartItem(id);
deleteCall.enqueue(new Callback<CartList>() {
@Override
public void onResponse(Call<CartList> call, Response<CartList> response) {
Log.d(TAG, "deleteItem by id" + response.code());
cartLists.removeAt(id);
addToCartAdapter.notifyDataSetChanged();
}
@Override
public void onFailure(Call<CartList> call, Throwable t) {
Log.d(TAG, t.getMessage());
}
});
推荐阅读
- php - 注销后如何避免在php中访问会话变量?
- javascript - 元组/二维数组的 ES6 映射函数
- sql - 如何使用返回多列的选择子查询进行插入选择
- ruby - 如何使用自定义配置文件注册 Firefox 驱动程序以与 Capybara 一起运行?
- html - 为什么我的锚标签 href 指向不同的链接?
- python - 字符串索引必须是整数 pandas 数据框
- python - 为什么我的程序可以处理大于一的数字
- javascript - 为什么画布会加倍图像的大小?
- android-handler - 来自 JobIntentService 的吐司
- android - 启用锁定任务模式时清除任务