0

BaseAdapter を拡張する Box アダプターがあります

public class BoxAdapter extends BaseAdapter {
  Context ctx;
  LayoutInflater lInflater;
  ArrayList<Product> objects;
  CheckBox cbBuy;

  BoxAdapter(Context context, ArrayList<Product> products) {
    ctx = context;
    objects = products;
    lInflater = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  }   
      @Override
      public int getCount() {
        return objects.size();
      }

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

      @Override
      public long getItemId(int position) {
        return position;
      }

      @Override
      public View getView(int position, View convertView, ViewGroup parent) {
        // используем созданные, но не используемые view
        View view = convertView;
        if (view == null) {
          view = lInflater.inflate(R.layout.childitem, parent, false);
        }

    Product p = getProduct(position);

    ((TextView) view.findViewById(R.id.tvDescr)).setText(p.name);
    ((TextView) view.findViewById(R.id.tvPrice)).setText(p.price + "");
    ((ImageView) view.findViewById(R.id.ivImage)).setImageResource(p.image);

    cbBuy = (CheckBox) view.findViewById(R.id.cbBox);

    cbBuy.setOnCheckedChangeListener(myCheckChangList);

    cbBuy.setTag(position);

    cbBuy.setChecked(p.box);
    return view;
  }

  Product getProduct(int position) {
    return ((Product) getItem(position));
  }

  ArrayList<Product> getBox() {
    ArrayList<Product> box = new ArrayList<Product>();
    for (Product p : objects) {
      // если в корзине
      if (p.box)
        box.add(p);
    }
    return box;
  }

  OnCheckedChangeListener myCheckChangList = new OnCheckedChangeListener() {
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

      getProduct((Integer) buttonView.getTag()).box = isChecked;
    }
  };
}

MainActivity で、チェックされているチェックボックスを見つけて削除する必要があります。

どうすればできますか。getItemId の位置を取得するために呼び出すメソッドとその方法。前もって感謝します。

case R.id.delete:

 if (boxAdapter.cbBuy.isChecked()) {

   products.remove( checked position id );
  }
4

1 に答える 1

0

getBoxProductsアダプタにメソッドを作成するだけです。

    public void removeBoxProducts()
    {
        List<Product> trash = new ArrayList<Product>();
        for (Product product:objects)
        {
            if (product.box)
            {
                trash.add(product);
            }
        }
        for (Product product:trash)
        {
            objects.remove(product);
        }
    }

このメソッドにアクセスするには、次を使用します。

ListView list = (ListView) findViewByIf(R.id.list_view_id);
BoxAdapter adapter = (BoxAdapter)list.getAdapter();
adapter.removeBoxProducts();
adapter.notifyDataSetChanged();
于 2012-10-10T06:04:52.240 に答える