#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
Комментариев нет:
Отправить комментарий