当前位置: 首页 > 知识库问答 >
问题:

ListView中的最后一项返回OutOfBoundsException

燕光熙
2023-03-14
    null
   productHolder.item_delete.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            cart_list.remove(getItem(position));
            notifyDataSetChanged();
    null
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;
    }
}

共有1个答案

方兴旺
2023-03-14

我认为问题是由使用以下两行引起的:cart_list.remove(getItem(position));...调用 call=service.deletePendingItem(cart_list.get(position).getitemid());

通知关于set不会有帮助,因为您试图用相同的方法将项目放在刚刚移除的位置上。如果您想要获得该项目,我建议将其重构为:

cart_list removedcartcart_list.remove(getItem(position));...调用 call=service.deletePendingItem(removedcart.getitemid());

 类似资料:
  • “我的列表视图”项包含一个“删除”按钮,我在适配器中将其设置为从数据库中删除该项。完成后,如何刷新包含listView的片段以删除该项?相关代码如下: 删除适配器中的项功能: listview在我的片段中是这样设置的: 谢谢 更新: 现在我已经将子项目上的OnClickListener从适配器传递到片段ListView OnItemClickListener,如下所示: 更新适配器 更新片段 但现

  • 我需要一个递归函数,首先返回最深的项,因为反转数组和推到第一个位置很慢。 我有一个目标: 和一个递归函数: 我需要一个递归函数,它可以返回一个对象父id的数组,这样最后一个父id就位于返回数组的第一位。对于上面的例子,如果我将该对象传入我的函数,它应该返回父对象的id,如下所示:

  • 问题内容: 我猜是fgets,但是找不到特定的语法。我正在尝试读出(我认为更容易的字符串形式)添加到日志文件中的最后一行。 问题答案: 最简单的天真解决方案是: 不过,这会将整个文件加载到内存中。可能是一个问题(或没有)。更好的解决方案是:

  • 我正在一个项目(简单的电话簿)为个人使用。我在删除listview(listView1)中的最后一个剩余项时遇到了麻烦。在这里你可以看看它是什么样子的: 所以,假设我在列表中有5个联系人,当我试图删除所有的联系人时,这是不可能的。只可能移除其中的4个。当我试图删除所有这些联系人,然后关闭/运行应用程序时,将不会有删除的联系人。当我试图删除其中4个并关闭/运行程序时,它们将被删除。当我试图删除最后一