Страницы

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

вторник, 24 декабря 2019 г.

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

#java #android


В общем сейчас делаю корзину покупок, и при удалении товара столкнулся с проблемой
обновления окна, когда товар удален. 
В главном окне есть код, который принимает инфу:

 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;
}


Надеюсь проблема понятна, и вопрос стоит в том, как я могу обратиться чтобы обновить
адаптер в главном классе через слушатель кнопки в другом, адаптер-классе. Или как можно
это по другому, грамотно реализовать и не выдумывать костылей.
    


Ответы

Ответ 1



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

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

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