从android中的listview中删除元素

时间:2017-01-05 14:56:43

标签: android listview

我有2个数组产品名称和价格。我在listview中的每一行都包含productname,price和一个图像按钮删除。当我点击删除按钮时,应从我的数组以及列表视图中删除所选的产品名称和价格。请指导我这样做,对我来说非常重要。如果有另一种方式这样做,请告诉我。我只是学生!

这是我的CartActivity

public class CartActivity extends Activity implements View.OnClickListener {


CartAdapter contactAdapter;
ListView listView;
public String productname[]=new String[10];
public String price[]=new String[10];

int i=0,m;
CartActivity(String scanContent){
    this.content = scanContent;
}
public CartActivity() {}
String product,Price;
String pri,prod;
Intent intent;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_cart);       
    listView = (ListView) findViewById(R.id.cart_list_view);

    contactAdapter = new CartAdapter(this,R.layout.activity_cart_list_view);
    listView.setAdapter(contactAdapter);

    intent = getIntent();
    productname = intent.getStringArrayExtra("productname");
    price = intent.getStringArrayExtra("price");

    for(int j=0;j<price.length;j++) {
        product = productname[j];
        Price = price[j];
        if (Price != null || product != null) {
            Cart contacts = new Cart(product, Price);
            contactAdapter.add(contacts);
        }
    }
}

这是我的CartAdapter

public class CartAdapter extends ArrayAdapter {
List list = new ArrayList();
int ind,x=0;
public  CartAdapter(CartActivity context, int resource) {
    super(context, resource);
}
public void add(Cart object) {
    super.add(object);
    list.add(object);
}

@Override
public int getCount() {
    return list.size();
}

@Override
public Object getItem(int position) {
    return list.get(position);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View row;
    row = convertView;

    ContactHolder contactHolder;
    if(row == null)
    {
        LayoutInflater layoutInflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        row = layoutInflater.inflate(R.layout.activity_cart_list_view,parent,false);
        contactHolder = new ContactHolder();
        contactHolder.tx_name =(TextView) row.findViewById(R.id.product_name);
        contactHolder.tx_price =(TextView) row.findViewById(R.id.price);

        contactHolder.cancelButton = (ImageButton) row.findViewById(R.id.cancel_button);


        row.setTag(contactHolder);
    }

    else
    {
        contactHolder = (ContactHolder)row.getTag();
    }

    cancelButton.setTag(position);
        cancelButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                Integer index = (Integer) view.getTag();
                list.remove(index.intValue());
            notifyDataSetChanged();

            }
        });


    Cart contacts = (Cart) this.getItem(position);
    contactHolder.tx_name.setText(contacts.getItemname());
    contactHolder.tx_price.setText(contacts.getPrice());
    return row;
}

static class ContactHolder
{
    TextView tx_name,tx_price;
    ImageButton cancelButton;
}
}

这是我的购物车

public class Cart {
private  String itemname,price;
public Cart(String itemname,String price) {
    this.setItemname(itemname);
    this.setPrice(price);
}
public void setItemname(String itemname) {
    this.itemname = itemname;
}
public void setPrice(String price) {
    this.price = price;
}
public String getItemname() {
    return itemname;
}
public String getPrice() {
    return price;
}
}

my each row in a listview contains this

1 个答案:

答案 0 :(得分:2)

就这样做,

在适配器类中,

cancelButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            list.remove(position);  //position is getView position
            // above line will remove from arraylist
            notifyDataSetChanged(); //this line reflects change in listview

        }
    });

要从Activity类中删除, 最好先创建一个ArrayList。

ArrayList<Cart> cardList = new ArrayList<Cart>();

添加到arrayList,

if (Price != null || product != null) {
        Cart contacts = new Cart(product, Price);
        cardList.add(contacts);
        contactAdapter.add(contacts); // this line should be removed if you work with arrayList
    }

现在创建一个从ActivityCard arrayList中删除的方法,

//call this method from cancelimage click in adapter class
public void removeFromList(int position){
    cardList.remove(position);  //this will remove from activity arraylist
}

最后根据现有的cartList数据计算您的账单。

***您也可以使用cardList创建适配器类对象,只需更改构造函数即可。如果你这样做,那么只需在cancelimage上调用removeFromList click并put,

adapter.notifyDataSetChanged();

之后

  

cardList.remove(位置);

它也会刷新你的列表视图。