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)
此代码有效并且该项目被删除。但是,直到我再次重新访问该活动后,该列表才会更新。如何立即更新视图?
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)
| 归档时间: |
|
| 查看次数: |
4787 次 |
| 最近记录: |