2017-08-21 8 views
0

私の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); 
 
    } 
 
    }

+0

このサイトのルールに従って、ポストのスクリーンショットにあるコードをテキストとして含める必要があります。 –

+0

ちょっと推測すると、UIスレッドからnotify()を呼び出そうとします。 –

+0

私はnotify()メソッドも呼び出そうとしましたが、何も起こりません、 –

答えて

0

.. recyclerviewに表示される予約量を更新します。サーバーの応答が成功した場合は、リストから削除してからnotifyDataSetChanged()を呼び出してください。

+0

どうすればいいですか? –

+0

あなたの質問にあなたのアダプタのコード全体を追加してください – matip

+0

上記はアダプタクラス –

関連する問題