如何删除列表视图android中的特定列表项?

时间:2015-02-25 05:40:27

标签: android android-listview

在我的应用程序中,我使用自定义适配器进行列表视图。在该列表视图项中 它有密切的形象。每当我点击图像时,需要删除特定行。我的问题是,如果我对第一个项目执行删除操作,但只对最后一个项目执行删除操作。请任何人帮助我。

我的代码:

 public class PaymentAdapter extends BaseAdapter {
        ArrayList<PaymentData> bpData;
        private ArrayList<PaymentData> arraylist;
        Activity activity;
        private LayoutInflater inflater;
        String orderitemid, orderid;
        ListView recharge_lv;

        public PaymentAdapter(Activity activity, ArrayList<PaymentData> bpData, ListView recharge_lv) {
            // TODO Auto-generated constructor stub
            this.activity = activity;
            this.bpData = bpData;
            this.recharge_lv = recharge_lv;
            inflater = LayoutInflater.from(activity);
        }

        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return bpData.size();
        }

        @Override
        public Object getItem(int location) {
            // TODO Auto-generated method stub
            return bpData.size();
        }

        @Override
        public long getItemId(int position) {
            // TODO Auto-generated method stub
            return position;
        }

        @Override
        public View getView(final int position, View convertView, ViewGroup parent) {
            // TODO Auto-generated method stub
            Typeface custom_regular = Typeface.createFromAsset(activity.getAssets(),
                    "fonts/OpenSans-Regular.ttf");

            if (inflater == null)
                inflater = (LayoutInflater) activity
                        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            if (convertView == null)
                convertView = inflater.inflate(R.layout.recharge_listitem, null);


            TextView accountnumber = (TextView) convertView
                    .findViewById(R.id.accountnumber);
            TextView servicename = (TextView) convertView
                    .findViewById(R.id.servicetypname);
            TextView planamount = (TextView) convertView
                    .findViewById(R.id.rechargeamount);
            final ImageView close = (ImageView) convertView
                    .findViewById(R.id.crosse_close_img);
            accountnumber.setTypeface(custom_regular);
            servicename.setTypeface(custom_regular);
            planamount.setTypeface(custom_regular);
            orderitemid = bpData.get(position).getOrderitemID();
            // Log.v("TAG_orderitemid",""+orderitemid);
            orderid = bpData.get(position).getOrderid();
            final LinearLayout layoutrecharge = (LinearLayout) convertView.findViewById(R.id.rechargelay);
            close.setTag(position);
            close.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {


                    new GetdeleteOrderItem().execute(WebUrl.RechargeServiceURL + "deleteOrderItem");
                    int deletePos = Integer.parseInt(v.getTag().toString());
                    bpData.remove(position);
                    Helper.getListViewSize(recharge_lv);//run it
                    notifyDataSetChanged();
                    reloadcas_cb.setChecked(false);

                }
            });

            accountnumber.setText(bpData.get(position).getAccountNumber());
            servicename.setText(bpData.get(position).getServicename());
            planamount.setText("Rs." + bpData.get(position).getRechargeamount());


            totalamount.setText("Rs " + bpData.get(position).getAmount());

            return convertView;
        }

4 个答案:

答案 0 :(得分:3)

  

我的问题是,如果我对第一项执行删除操作,但是   删除仅对最后一项执行的操作

因为您通过position方法传递remove传递deletePos(其中包含最后一次调用getView方法时分配的值)setTag/getTag使用int deletePos = Integer.parseInt(v.getTag().toString()); bpData.remove(deletePos); 保存视图方法:

{{1}}

答案 1 :(得分:0)

尝试以下代码段:

delete.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            // your position of item to remove
            Integer index = (Integer) v.getTag();
            // your arrtlist ot arry to remove item
            mProducts.remove(index.intValue());
            notifyDataSetChanged();
        }
    });

答案 2 :(得分:0)

替换此代码:

 new GetdeleteOrderItem().execute(WebUrl.RechargeServiceURL + "deleteOrderItem");
                    int deletePos = Integer.parseInt(v.getTag().toString());
                    bpData.remove(position);
                    Helper.getListViewSize(recharge_lv);//run it
                    notifyDataSetChanged();
                    reloadcas_cb.setChecked(false);

 new GetdeleteOrderItem().execute(WebUrl.RechargeServiceURL + "deleteOrderItem");
                    int deletePos = Integer.parseInt(v.getTag().toString());
                    bpData.remove(deletePos);
                    Helper.getListViewSize(recharge_lv);//run it
                    notifyDataSetChanged();
                    reloadcas_cb.setChecked(false);

答案 3 :(得分:0)

试试这个

bpData.remove(bpData.get(position));

而不是

bpData.remove(position);
相关问题