【发布时间】:2018-09-06 17:26:56
【问题描述】:
我已经尝试了这个网站的大多数答案,但没有得到想要的结果。
我有 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();
}
}
此代码有效并且该项目已被删除。但是,在我再次重新访问该活动之前,该列表不会更新。如何立即更新视图?
【问题讨论】:
-
这主要是因为您执行网络操作以删除位于不同线程中的行,尝试在
CartAdapter的私有函数中从onResponse移动代码然后调用它onResponse -
我应该删除响应中的代码块吗?
-
您可以发表您的评论作为答案,以便我接受吗?
-
把它移到一个函数中,比如说
updateData(Cart cart),然后在onResponse里面调用这个函数 -
谢谢。那行得通
标签: android android-recyclerview