当前位置: 首页 > 知识库问答 >
问题:

删除行[重复]后更新Recyclerview列表

厉钊
2023-03-14

我有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();
}
}

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

共有1个答案

华宇
2023-03-14
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());
}

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

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

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

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

public Cart getItem(int position){
    return itemList != null itemList.get(position) : null;
} // you have to check if this is null when you call it 
 类似资料:
  • 我在片段的底部有一个水平图像滑块。片段的顶部显示了一些细节。一旦用户点击底部的图像,想法是从图像滑块中删除该图像,并在片段中显示其信息。现在,信息显示出来,但图像不会从中删除。下面是我在最外层布局的中编码的内容。我试过了所有我能找到的相关答案,但都没有奏效。它们都在代码里。请让我知道我做错了什么或者错过了什么。 适配器的完整代码 }

  • 我正在尝试更新JTable(或data?)的行在我对一行执行删除操作后,当选择另一行时,可以编辑所选行。当前删除该行将使已删除行下方的行上移,但如果选择了该行号并尝试进行编辑,则会返回(JOptionPane),就像未选择任何内容一样。它似乎没有“刷新”数据(?)。 这是一个SCCE,希望有人可以运行它并指出问题。我试着尽可能地缩小它,以便于复制/粘贴: 我在这里看到这个问题的各种形式都有一些不同

  • 删除项目后,“我的回收器”视图未更新。此recyclerView位于片段内部。我试过各种方法,但都不管用。 片段类中的适配器声明 回收服务适配器: } 调试项目时,我可以看到该项实际上正在从ArrayList中删除。但不在循环视图中更新。 删除后,如果滚动回收站视图,则从回收站视图中删除已删除的项。但不是没有滚动。

  • 对于包含10列的数据框,如何删除索引2以上的列。数据框如下所示: 任务是删除列3-列10

  • 问题内容: 我有一张看起来像这样的桌子 表格1 ID,名称 如何编写查询以删除所有具有重复名称的行,但保留具有较低ID的行? 问题答案: 如果您使用的是SQL Server 2005或更高版本: 如果使用SQL Server 2000及更低版本

  • 问题内容: 我有一个带有Year列的表,并且此列不应有重复的值。因此,我最终得到一张仅具有2007年记录的表格。 那么,如何删除具有重复年份值的行呢? 谢谢 问题答案: 我认为您可以尝试使用IGNORE添加唯一索引: MySQL应该以类似以下内容的方式进行响应: 当然,您可以将其留给MySQL来决定删除哪些行。 编辑: 这适用于任意多的列: 查看有关CREATE INDEX的MySQL文档。一个常