Страницы

Поиск по вопросам

понедельник, 26 ноября 2018 г.

вызвать adapter.notifyDataSetChanged() не из главного класса, но обновить главный

В общем сейчас делаю корзину покупок, и при удалении товара столкнулся с проблемой обновления окна, когда товар удален. В главном окне есть код, который принимает инфу:
gvCart=(GridView)findViewById(R.id.gridView_Cart); final List array_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; }
Надеюсь проблема понятна, и вопрос стоит в том, как я могу обратиться чтобы обновить адаптер в главном классе через слушатель кнопки в другом, адаптер-классе. Или как можно это по другому, грамотно реализовать и не выдумывать костылей.


Ответ

Ваша проблема в том, что обновляя адаптер вы не изменяете данные, которые он отображает. Сначала измените данные, потом обновляйте адаптер.
if (response.contains("true")){ //ВОТ ТУТ НУЖНО ОБНОВИТЬ АДАПТЕР В ГЛАВНОМ ОКНЕ final ItemCart item=items.get(position); //удаляем элемент из списка данных items.remove(item); //обновляем адаптер notifyDataSetChanged(); }
Скорее всего нужно будет также переопределить equals метод в классе ItemCart

Комментариев нет:

Отправить комментарий