天天看點

android listview中checkbox(購物車,批量操作)

最近在做購物車這裡。 在做全選的時候 總會出現getchillat()空指針的問題,是以放棄了。

後來參考了網上的一些例子。

這篇:http://www.open-open.com/lib/view/open1343744786602.html 還算可以  在擴充卡中把view放入map中。 算是解決了一般的問題。

至于加入之後就可以看下面

check_goods_all和delete中的代碼吧

這兩個函數的最後都重新設定了擴充卡 因為我在調用cartadapter.notifydatasetchanged()的時候沒有變化,具體也不太清楚。但是卻是好用。

因為某些原因不能提供整個項目源代碼。

[java] view

plaincopy

android listview中checkbox(購物車,批量操作)
android listview中checkbox(購物車,批量操作)

public class shopping_cart_listactivity extends activity {  

    private intent intent;  

    private listview listview;  

    private arraylist<hashmap<string, object>> listitem;  

    // private simpleadapter listadapter;  

    private cartadapter cartadapter;  

    private checkbox check_goods_all;  

    string[] goods_name = { "奶粉", "奶粉", "奶粉", "奶粉", "奶粉", "奶粉", "奶粉", "奶粉" };  

    int[] goods_number = { 1, 2, 3, 4, 5, 6, 7, 8 };  

    double[] goods_price = { 668.00, 668.00, 668.00, 668.00, 668.00, 668.00,  

            668.00, 668.00 };  

    public void init() {  

        intent = new intent();  

        listview = (listview) findviewbyid(r.id.listview_shopping_cart_list);  

        check_goods_all = (checkbox) findviewbyid(r.id.check_goods_all);  

        check_goods_all.setchecked(false);  

        // listadapter = new simpleadapter(this, getdata(),  

        cartadapter = new cartadapter(getdata(), this.getapplicationcontext());  

        listview.setadapter(cartadapter);  

    }  

    public arraylist<hashmap<string, object>> getdata() {  

        listitem = new arraylist<hashmap<string, object>>();  

        for (int i = 0; i < 8; i++) {  

            hashmap<string, object> map = new hashmap<string, object>();  

            map.put("goods_info", goods_name[i]);  

            map.put("shopping_cart_each_count", goods_number[i]);  

            map.put("shopping_cart_each_price", goods_price[i]);  

            // map.put("check_goods", false);  

            listitem.add(map);  

        }  

        return listitem;  

    @override  

    protected void oncreate(bundle savedinstancestate) {  

        super.oncreate(savedinstancestate);  

        setcontentview(r.layout.activity_shopping_cart_list);  

        init();  

    public boolean oncreateoptionsmenu(menu menu) {  

        // inflate the menu; this adds items to the action bar if it is present.  

        getmenuinflater().inflate(r.menu.activity_shopping_cart_list1, menu);  

        return true;  

    public void check_goods_all(view v) {  

        /* 

         * for (int i = 0; i < listview.getcount(); i++) { 

         * cartadapter.getisselected().put(i, check_goods_all.ischecked()); } 

         */  

        for (int i = 0; i < cartadapter.getcount(); i++) {  

            cartadapter.isselected.set(i, check_goods_all.ischecked());  

    public void delete(view v) {  

        int num = cartadapter.isselected.size();  

        arraylist<boolean> temp_isselected = new arraylist<boolean>();  

        arraylist<hashmap<string, object>> temp_listitem = new arraylist<hashmap<string,object>>();  

        int j = 0;  

        for (int i = 0; i < num; i++) {  

            if (!cartadapter.isselected.get(i)) {  

                temp_isselected.add(j, false);  

                temp_listitem.add(j++, cartadapter.list.get(i));  

            }  

        cartadapter.setisselected(temp_isselected);  

        cartadapter.setlist(temp_listitem);  

        system.out.println("擴充卡中剩餘:" + listitem.size());  

         * for (int i = 0; i < listview.getcount(); i++) { relativelayout ll = 

         * (relativelayout) listview.getchildat(i);// 獲得子級 checkbox chkone = 

         * (checkbox) ll.findviewbyid(r.id.check_goods);// 從子級中獲得控件 if 

         * (chkone.ischecked()) { system.out.println(i + "------->"); 

         * listitem.remove(i); listadapter.notifydatasetchanged(); } } 

    public void return_to_before(view v) {  

        intent.setclass(shopping_cart_listactivity.this, frameactivity.class);  

        startactivity(intent);  

        finish();  

    public void settle(view v) {  

        intent.setclass(shopping_cart_listactivity.this,  

                brandrankgoodsinfoactivity.class);  

    class cartadapter extends baseadapter {  

        // 儲存listview item的狀态  

        hashmap<integer, view> map = new hashmap<integer, view>();  

        // 填充資料的list  

        private arraylist<hashmap<string, object>> list;  

        // 用來控制checkbox的選中狀況  

        private arraylist<boolean> isselected;  

        // 上下文  

        private context context;  

        // 用來導入布局  

        private layoutinflater inflater = null;  

        // 構造器  

        public cartadapter(arraylist<hashmap<string, object>> list,  

                context context) {  

            this.context = context;  

            this.list = list;  

            isselected = new arraylist<boolean>();  

            // 初始化資料  

            initdate();  

        // 初始化isselected的資料  

        private void initdate() {  

            for (int i = 0; i < list.size(); i++) {  

                isselected.add(i, false);  

        @override  

        public int getcount() {  

            return list.size();  

        public object getitem(int position) {  

            return list.get(position);  

        public long getitemid(int position) {  

            return position;  

        @suppresswarnings("unused")  

        public view getview(int position, view convertview, viewgroup parent) {  

            view view;  

            viewholder holder = null;  

            if (map.get(position) == null) {  

                // 獲得viewholder對象  

                // 導入布局并指派給convertview  

                layoutinflater minflater = (layoutinflater) context  

                        .getsystemservice(context.layout_inflater_service);  

                view = minflater.inflate(r.layout.listview_shopping_cart, null);  

                holder = new viewholder();  

                holder.check_goods = (checkbox) view  

                        .findviewbyid(r.id.check_goods);  

                holder.shopping_cart_each_count = (edittext) view  

                        .findviewbyid(r.id.shopping_cart_each_count);  

                holder.shopping_cart_each_price = (textview) view  

                        .findviewbyid(r.id.shopping_cart_each_price);  

                holder.goods_info = (textview) view  

                        .findviewbyid(r.id.goods_info);  

                final int p = position;  

                // 為view設定标簽  

                // final boolean ischecked = holder.check_goods.ischecked();  

                holder.check_goods.setonclicklistener(new onclicklistener() {  

                    @override  

                    public void onclick(view v) {  

                        // todo auto-generated method stub  

                        checkbox cb = (checkbox) v;  

                        isselected.set(p, cb.ischecked());  

                        /* 

                         * holder.check_goods.toggle(); isselected.put(position, 

                         * holder.check_goods.ischecked()); 

                         */  

                    }  

                });  

                view.settag(holder);  

            } else {  

                // 取出holder  

                view = map.get(position);  

                holder = (viewholder) view.gettag();  

            // 設定list中textview的顯示  

            holder.goods_info.settext((string) list.get(position).get(  

                    "goods_info"));  

            holder.shopping_cart_each_price.settext(((double) list  

                    .get(position).get("shopping_cart_each_price")).tostring());  

            holder.shopping_cart_each_count.settext(((integer) list.get(  

                    position).get("shopping_cart_each_count")).tostring());  

            // 根據isselected來設定checkbox的選中狀況  

            holder.check_goods.setchecked(isselected.get(position));  

            return view;  

        public void setlist(arraylist<hashmap<string, object>> list) {  

        public arraylist<hashmap<string, object>> getlist() {  

            return list;  

        public arraylist<boolean> getisselected() {  

            return isselected;  

        public void setisselected(arraylist<boolean> isselected) {  

            this.isselected = isselected;  

    class viewholder {  

        public relativelayout linerlayout_shopping_cart;  

        public listview listview_shopping_cart_list;  

        public button shopping_cart_reduce;  

        public button shopping_cart_add;  

        public edittext shopping_cart_each_count;  

        public textview shopping_cart_each_price;  

        public textview goods_info;  

        public checkbox check_goods;  

}  

繼續閱讀