私は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のみがあります。 'position-1'を使用します。これがリストビュー内のあなたの位置である場合は、スクロールしてオフセットがあることに注意してください。 – Fusselchen
どこからポジション変数の値を取得していますか? –
あなたはその条件を説明できますか?私はまた、size()とget(position)が等しいかどうかを調べる際に来て、position -1を削除しますか? –