2017-07-12 16 views
0

私はlistviewのすべての項目に削除ボタンがある古いアプリを持っています。私は最近のアプリケーションで使用するためにその形式に従ったが、私はリストビューの最後の項目を削除しようとする度にOutOfBoundsException: Invalid index 4, size 4を返す。ListViewの最後の項目はOutOfBoundsExceptionを返します

時にエラーが発生します。私はリスト にのみ項目を削除しようとするリストに

  • 最後アイテムを削除しようとする

    • ここに私のリストから項目を削除する方法です:

      Cart_Adapter:私が試しWHAT

      productHolder.item_delete.setOnClickListener(new View.OnClickListener() { 
           @Override 
           public void onClick(View v) { 
      
            cart_list.remove(getItem(position)); 
            notifyDataSetChanged(); 
      

      しかし、すべてが失敗しました:notifyDataSetChanged

    • とない

      • remove(getItem(position));
      • remove(cart_list.get(position));
      • cart_list.remove(getItem(position));
      • とし、notifyDataSetChanged
      • なし

      EDIT

      package dagger.com.japorms.adapter; 
      
      import android.app.Activity; 
      import android.content.Context; 
      import android.os.Bundle; 
      import android.support.annotation.LayoutRes; 
      import android.support.annotation.NonNull; 
      import android.support.annotation.Nullable; 
      import android.support.v4.app.FragmentManager; 
      import android.support.v4.app.FragmentTransaction; 
      import android.support.v7.app.AppCompatActivity; 
      import android.view.LayoutInflater; 
      import android.view.View; 
      import android.view.ViewGroup; 
      import android.widget.ArrayAdapter; 
      import android.widget.Button; 
      import android.widget.ImageView; 
      import android.widget.TextView; 
      import android.widget.Toast; 
      
      import com.squareup.picasso.Picasso; 
      
      import java.text.DecimalFormat; 
      import java.util.ArrayList; 
      import java.util.List; 
      
      import dagger.com.japorms.R; 
      
      import dagger.com.japorms.fragment.Cart_Fragment; 
      import dagger.com.japorms.main.User_Activity; 
      import dagger.com.japorms.model.Cart_List; 
      import dagger.com.japorms.model.Cart_Model; 
      import dagger.com.japorms.model.Order; 
      import dagger.com.japorms.model.Pending_Items_Model; 
      import dagger.com.japorms.model.Product_List; 
      import dagger.com.japorms.other.HttpConstants; 
      import dagger.com.japorms.service.APIService; 
      import retrofit2.Call; 
      import retrofit2.Callback; 
      import retrofit2.Response; 
      import retrofit2.Retrofit; 
      import retrofit2.converter.gson.GsonConverterFactory; 
      
      import static dagger.com.japorms.other.HttpConstants.BASE_URL; 
      import static dagger.com.japorms.other.HttpConstants.HTTP_PRODUCT_IMAGE; 
      
      /** 
      * Created by Claude on 06/07/2017. 
      */ 
      
      public class Cart_Adapter extends ArrayAdapter<Cart_List> { 
      
          Context context; 
          int layoutResourceId; 
          ArrayList<Cart_List> cart_list = new ArrayList<>(); 
          DecimalFormat formatter = new DecimalFormat("#,###,###.00"); 
      
          int item_list; 
          int temp; 
      
          Double total_amount =0.00d; 
      
          public Cart_Adapter(Context context, int layoutResourceId, ArrayList<Cart_List> cart_list) { 
      
           super(context,layoutResourceId,cart_list); 
      
           this.layoutResourceId = layoutResourceId; 
           this.context = context; 
           this.cart_list = cart_list; 
          } 
      
          @NonNull 
          @Override 
          public View getView(final int position, @Nullable View convertView, @NonNull ViewGroup parent) { 
           View row = convertView; 
      
           ProductHolder productHolder; 
      
           if(row == null) { 
            LayoutInflater inflater = ((Activity) getContext()).getLayoutInflater(); 
            row = inflater.inflate(layoutResourceId,parent,false); 
      
            productHolder = new ProductHolder(); 
            productHolder.item_img = (ImageView) row.findViewById(R.id.item_cart_img); 
            productHolder.item_name = (TextView) row.findViewById(R.id.item_cart_name); 
            productHolder.item_price = (TextView) row.findViewById(R.id.item_cart_price); 
            productHolder.item_qty = (TextView) row.findViewById(R.id.item_cart_qty); 
            productHolder.item_size = (TextView) row.findViewById(R.id.item_cart_size); 
            productHolder.item_modify = (TextView) row.findViewById(R.id.item_cart_modify); 
            productHolder.item_delete = (TextView) row.findViewById(R.id.item_cart_remove); 
      
      
            row.setTag(productHolder); 
      
      
           } 
           else 
      
            productHolder = (ProductHolder) row.getTag(); 
      
      
            productHolder.item_name.setText("Name: "+cart_list.get(position).getItemName()); 
            productHolder.item_price.setText("Price: PHP " + formatter.format(Double.parseDouble(cart_list.get(position).getItemPrice()))); 
            productHolder.item_qty.setText("Quantity: "+cart_list.get(position).getItemQty()); 
            productHolder.item_size.setText("Size: "+cart_list.get(position).getSize()); 
      
            Picasso.with(context).load(BASE_URL + HTTP_PRODUCT_IMAGE + cart_list.get(position).getCategory() + "/" + 
              cart_list.get(position).getItemId() + ".jpg").into(productHolder.item_img); 
      
      
      
      
      
           productHolder.item_delete.setOnClickListener(new View.OnClickListener() { 
            @Override 
            public void onClick(View v) { 
      
      
             cart_list.remove(getItem(position)); 
           notifyDataSetChanged(); 
      
             Retrofit retrofit = new Retrofit.Builder() 
               .baseUrl(HttpConstants.BASE_URL) 
               .addConverterFactory(GsonConverterFactory.create()) 
               .build(); 
      
             APIService service = retrofit.create(APIService.class); 
      
      
             Call<Pending_Items_Model> call = service.deletePendingItem(cart_list.get(position).getItemId()); 
      
             call.enqueue(new Callback<Pending_Items_Model>() { 
              @Override 
              public void onResponse(Call<Pending_Items_Model> call, Response<Pending_Items_Model> response) { 
               ((User_Activity) context).CheckCart(); 
              } 
      
              @Override 
              public void onFailure(Call<Pending_Items_Model> call, Throwable t) { 
      
              } 
             }); 
      
            } 
           }); 
      
      
           return row; 
      
      
      
          } 
      
      
      
      
      
          static class ProductHolder{ 
      
           ImageView item_img; 
           TextView item_name; 
           TextView item_price; 
           TextView item_qty; 
           TextView item_size; 
           TextView item_modify; 
           TextView item_delete; 
          } 
      } 
      
+0

自分の位置(それは今まで何を)一つであるが、しかし、あなたのリストにはインデックス0のみがあります。 'position-1'を使用します。これがリストビュー内のあなたの位置である場合は、スクロールしてオフセットがあることに注意してください。 – Fusselchen

+0

どこからポジション変数の値を取得していますか? –

+0

あなたはその条件を説明できますか?私はまた、size()とget(position)が等しいかどうかを調べる際に来て、position -1を削除しますか? –

答えて

0

が、私は問題は次の2行を使用することによって引き起こされると考えていFULLアダプタクラス: cart_list.remove(getItem(position)); ... Call<Pending_Items_Model> call = service.deletePendingItem(cart_list.get(position).getItemId());

助けにはなりませんセットについての通知同じメソッドを使用して削除した位置にアイテムを取得しようとしているので、あなたがそのアイテムを入手したい場合は、私はこれにリファクタリングを示唆している:あなたは一つだけのアイテムを持っている場合は、位置が1であるので、

Cart_List removedCartcart_list.remove(getItem(position)); ... Call<Pending_Items_Model> call = service.deletePendingItem(removedCart.getItemId());

関連する問題