私のonclickの削除と追加ボタンは、MyViewHolderクラスの下のアダプタクラスにあります。 私は削除してサーバーにデータを追加することができました。それはrecyclerviewからの更新ではありません。以下は私のアダプタクラスです。私はボレーライブラリを使用してリクエストを送信し、リクエストを削除することは私の** sで苦痛だったので、メソッドをポストするように変更しました。しかし、それは今直面している問題ではない。私はちょうどあなたがサーバーからデータを削除しているが、あなたはまだあなたのリストにアプリケーションのメモリにそれを維持しているおかげで追加と削除ボタンをクリックした後に、recyclerviewのtextviewを更新しようとしています。 notifyDataSetChanged();メソッドが動作しません
public class CartAdapter extends RecyclerView.Adapter<CartAdapter.MyViewHolder>{
private List<Cart> cartList;
private Context mContext;
private Cart cart;
private int inventoryId;
private String username;
private CartAdapter cartAdapter;
private String url = "http://192.168.4.31/api/canteen/cart";
private String delete_url = "http://192.168.4.31/api/canteen/mobile_delete";
String qtyReserved;
public static boolean add= true;
public static int sum = 0;
public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
public ImageView thumbnail, plus, minus;
public TextView menuName, quantity_reserved, price ;
public MyViewHolder(View view) {
super(view);
thumbnail = view.findViewById(R.id.itemImage);
menuName = view.findViewById(R.id.itemName);
quantity_reserved = view.findViewById(R.id.qty);
price = view.findViewById(R.id.price);
plus = view.findViewById(R.id.plusImage);
minus = view.findViewById(R.id.minusImage);
view.setOnClickListener(this);
plus.setOnClickListener(this);
minus.setOnClickListener(this);
}
@Override
public void onClick(View view) {
cart = cartList.get(getAdapterPosition());
inventoryId = cart.getCart_inv_id();
username = cart.getScreen_name();
if (view.getId() == plus.getId()) {
putToCart(getAdapterPosition());
// cartAdapter.notifyItemChanged(getAdapterPosition());
}
if (view.getId() == minus.getId()) {
deleteFromCart(getAdapterPosition());
// notifyItemRemoved(getAdapterPosition());
notifyItemRangeChanged(getAdapterPosition(),cartList.size());
}
}
}
public CartAdapter(Context context, List<Cart> images) {
mContext = context;
this.cartList = images;
this.cartAdapter = this;
}
@Override
public MyViewHolder onCreateViewHolder(final ViewGroup parent, final int viewType) {
final View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.cart_thumbnail, parent, false);
return new MyViewHolder(itemView);
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
cart = cartList.get(position);
String url_image = "http://192.168.4.31";
String name = cart.getImg_url();
String finalurl = "";
finalurl = url_image + name;
Glide.with(mContext).load(finalurl)
.thumbnail(0.3f)
.fitCenter()
.placeholder(R.drawable.lunch)
.diskCacheStrategy(DiskCacheStrategy.ALL)
.into(holder.thumbnail);
holder.menuName.setText(cartList.get(position).getCart_inv_name());
holder.quantity_reserved.setText(Integer.toString(cartList.get(position).getQuantity_reserved()));
holder.price.setText(Double.toString(cartList.get(position).getTotal())+"0");
// refreshBlockOverlay(position);
// if(add){
// sum = sum + cart.getQuantity_reserved();
// add= false; }
}
@Override
public int getItemCount() {
return cartList.size();
}
public void putToCart(final int position) {
JSONObject param = new JSONObject();
try {
param.put("screen_name", username);
param.put("inventory_id", inventoryId);
param.put("pending", "null");
} catch (JSONException e) {
e.printStackTrace();
}
JsonObjectRequest request_json = new JsonObjectRequest(Request.Method.PUT, url, param,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
qtyReserved = response.getString("amount_reserved");
Cart image = new Cart();
image.setQuantity_reserved(Integer.valueOf(qtyReserved));
cartList.add(image);
// notifyItemInserted(position);
notifyItemRangeChanged(position , getItemCount());
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
VolleyLog.e("Error: ", error.getMessage());
Toast.makeText(mContext, "Oops!! Now its not available ", Toast.LENGTH_SHORT).show();
}
});
MySingleton.mySingletonInstance(mContext.getApplicationContext()).addToRequestque(request_json);
}
public void deleteFromCart(final int position2) {
JSONObject param = new JSONObject();
try {
param.put("screen_name", username);
param.put("inventory_id", inventoryId);
} catch (JSONException e) {
e.printStackTrace();
}
JsonObjectRequest request_json = new JsonObjectRequest(Request.Method.POST, delete_url, param,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
// notifyItemRemoved(position2);
//notifyItemRangeChanged();
// notifyItemRemoved(position2);
// notifyItemChanged(position2);
//notifyItemRangeChanged(position2, 1, null);
// cartAdapter.notifyDataSetChanged();
notifyDataSetChanged();
Toast.makeText(mContext, "deleted", Toast.LENGTH_SHORT).show();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
VolleyLog.e("Error: ", error.getLocalizedMessage());
Toast.makeText(mContext, "not ok " + error.getMessage(), Toast.LENGTH_SHORT).show();
}
});
MySingleton.mySingletonInstance(mContext.getApplicationContext()).addToRequestque(request_json);
}
}
このサイトのルールに従って、ポストのスクリーンショットにあるコードをテキストとして含める必要があります。 –
ちょっと推測すると、UIスレッドからnotify()を呼び出そうとします。 –
私はnotify()メソッドも呼び出そうとしましたが、何も起こりません、 –