首页 > 解决方案 > 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();
            }
        }

标签: androidandroid-studioandroid-recyclerviewretrofit

解决方案


你不需要再次调用 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());
    }
});

推荐阅读