删除行后更新 Recyclerview 列表

0 android android-recyclerview

我已经尝试了该网站的大多数答案,但没有得到所需的结果。

我有 recyclerview,其中包含项目列表和每行中包含的按钮。单击该按钮时,我希望删除整行并自动更新列表。

这是我的适配器类代码:

public class CartAdapter extends RecyclerView.Adapter<CartViewHolder> {

private static final String TAG = CartAdapter.class.getSimpleName();

private final Context context;
private List<Cart> itemsList;
private String id;

public CartAdapter(Context context, List<Cart> itemsList) {
    this.context = context;
    this.itemsList = itemsList;
}

@Override
public CartViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.cart_items_layout, parent, false);
    return new CartViewHolder(view);
}

@Override
public void onBindViewHolder(final CartViewHolder viewholder, final int position) {
    final Cart cart = itemsList.get(position);
    id = cart.getProductId();

    AndroidNetworking.get(Constants.PRODUCT_DETAILS_ENDPOINT + id)
            .setTag("Get Product Image")
            .setPriority(Priority.HIGH)
            .build()
            .getAsJSONObject(new JSONObjectRequestListener() {
                @Override
                public void onResponse(JSONObject response) {
                    Log.d(TAG, "Cart Item Image Response:\t" + response.toString());
                    String imagePath = null;
                    try {
                        JSONObject itemObject = new JSONObject(response.toString());
                        JSONObject data = itemObject.getJSONObject("data");
                        imagePath = data.getString("image");

                        Picasso.with(context)
                                .load(imagePath)
                                .placeholder(R.drawable.noimage)
                                .into(viewholder.cartItemImg);

                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }

                @Override
                public void onError(ANError anError) {

                }
            });

    viewholder.cartItemTitle.setText(cart.getProductTitle());
    viewholder.cartQtyTV.setText(cart.getCartQty() + "");
    viewholder.clearProductIV.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            removeProductRow(cart);
        }
    });
    viewholder.decreaseCartIV.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            decreaseProduct();
        }
    });
    viewholder.increaseCartIV.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            increaseProduct();
        }
    });
}

private void increaseProduct() {

}

private void decreaseProduct() {

}

public void removeProductRow(final Cart cart) {
    AndroidNetworking.get(Constants.REMOVE_PRODUCT_CART + id)
            .setTag("Delete Product From Cart")
            .setPriority(Priority.HIGH)
            .build()
            .getAsJSONObject(new JSONObjectRequestListener() {
                @Override
                public void onResponse(JSONObject response) {
                    Log.d(TAG, "Delete Product From Cart Response:\t" + response.toString());

                    int position = itemsList.indexOf(cart);
                    itemsList.remove(position);
                    notifyItemRemoved(position);
                    notifyItemRangeChanged(position, itemsList.size());
                }

                @Override
                public void onError(ANError anError) {

                }
            });
}

@Override
public int getItemCount() {
    if (itemsList == null) {
        return 0;
    }
    return itemsList.size();
}
}
Run Code Online (Sandbox Code Playgroud)

此代码有效并且该项目被删除。但是,直到我再次重新访问该活动后,该列表才会更新。如何立即更新视图?

Ion*_*jan 6

private update(Cart cart){
      Log.d(TAG, "Delete Product From Cart Response:\t" +
      response.toString());
                int position = itemsList.indexOf(cart);
                itemsList.remove(position);
                notifyItemRemoved(position);
                notifyItemRangeChanged(position, itemsList.size());
}
Run Code Online (Sandbox Code Playgroud)

然后,onResponse只需调用update(cart);<- 您可能需要根据您的需要将一些其他数据传递到该函数中。

更新(与您的第二个问题相关):

@Override
public long getItemId(int position) {
    return itemList != null ? itemList.get(position).getId() : 0;
}
Run Code Online (Sandbox Code Playgroud)

或者,您可以创建一个公共函数来为您返回完整的项目

public Cart getItem(int position){
    return itemList != null itemList.get(position) : null;
} // you have to check if this is null when you call it 
Run Code Online (Sandbox Code Playgroud)