#java #android
В общем сейчас делаю корзину покупок, и при удалении товара столкнулся с проблемой обновления окна, когда товар удален. В главном окне есть код, который принимает инфу: gvCart=(GridView)findViewById(R.id.gridView_Cart); final Listarray_dynamic = new ArrayList (); adapterCartBuy=new AdapterCartBuy(Cart.this,array_dynamic); gvCart.setAdapter(adapterCartBuy); String register = "http://wwwwwwwwww/cart"; StringRequest request = new StringRequest(Request.Method.GET, register, new Response.Listener () { @Override public void onResponse(String response) { Log.d(TAG,"response"+ response); try { ObjectMapper mapper_main = new ObjectMapper(); PjCart pjCart = mapper_main.readValue(response, PjCart.class); for (PjCartItemsString pjCartItemsString : pjCart.getData().getItems()){ String image = pjCartItemsString.getImage(); itemCart.setImage(image); array_dynamic.add(itemCart); } Log.d(TAG,"pojCart"+ pjCart); }catch (IOException e){ e.printStackTrace(); }adapterCartBuy.notifyDataSetChanged(); Но вью элементы управления и коннект на удаление информации находится в адаптер окне, ниже: public class AdapterCartBuy extends BaseAdapter { final String TAG = "mylogs"; private LayoutInflater inflater; private Activity activity; private List items; ImageLoader imageLoader=AppController.getmInstance().getmImageLoader(); public AdapterCartBuy(Activity activity, List items){ this.activity=activity; this.items=items; } @Override public int getCount() { return items.size(); } @Override public Object getItem(int position) { return items.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { if(inflater==null){ inflater=(LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); } if(convertView ==null){ convertView=inflater.inflate(R.layout.item_cart,null); } if(imageLoader==null) imageLoader=AppController.getmInstance().getmImageLoader(); NetworkImageView imageView= (NetworkImageView) convertView.findViewById(R.id.networkImageView_cart); ImageView del=(ImageView)convertView.findViewById(R.id.imageviewCartDel); final TextView textViewToken=(TextView)convertView.findViewById(R.id.textView_itemcart_token); textViewToken.setVisibility(View.GONE); final TextView itemId=(TextView)convertView.findViewById(R.id.textView_itemcart_id); itemId.setVisibility(View.GONE); del.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String del = "http://wwwwwwww/cart/"+itemId.getText().toString()+"/del"; StringRequest request = new StringRequest(Request.Method.GET, del, new Response.Listener () { @Override public void onResponse(String response) { Log.d(TAG,"response "+ response); if (response.contains("true")){ ВОТ ТУТ НУЖНО ОБНОВИТЬ АДАПТЕР В ГЛАВНОМ ОКНЕ } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { } }) { @Override public Map getHeaders() throws AuthFailureError { Map params = new HashMap (); params.put("Accept", "application/json"); params.put("Authorization", "Bearer "+textViewToken.getText().toString()); return params; } };AppController.getmInstance().addToRequesQueue(request); } }); //getting data for row final ItemCart item=items.get(position); imageView.setImageUrl(item.getImage(), imageLoader); textViewToken.setText(item.getToken()); itemId.setText(item.getItem_id()); return convertView; } Надеюсь проблема понятна, и вопрос стоит в том, как я могу обратиться чтобы обновить адаптер в главном классе через слушатель кнопки в другом, адаптер-классе. Или как можно это по другому, грамотно реализовать и не выдумывать костылей.
Ответы
Ответ 1
Ваша проблема в том, что обновляя адаптер вы не изменяете данные, которые он отображает. Сначала измените данные, потом обновляйте адаптер. if (response.contains("true")){ //ВОТ ТУТ НУЖНО ОБНОВИТЬ АДАПТЕР В ГЛАВНОМ ОКНЕ final ItemCart item=items.get(position); //удаляем элемент из списка данных items.remove(item); //обновляем адаптер notifyDataSetChanged(); } Скорее всего нужно будет также переопределить equals метод в классе ItemCart
Комментариев нет:
Отправить комментарий