最近在做購物車這裡。 在做全選的時候 總會出現getchillat()空指針的問題,是以放棄了。
後來參考了網上的一些例子。
這篇:http://www.open-open.com/lib/view/open1343744786602.html 還算可以 在擴充卡中把view放入map中。 算是解決了一般的問題。
至于加入之後就可以看下面
check_goods_all和delete中的代碼吧
這兩個函數的最後都重新設定了擴充卡 因為我在調用cartadapter.notifydatasetchanged()的時候沒有變化,具體也不太清楚。但是卻是好用。
因為某些原因不能提供整個項目源代碼。
[java] view
plaincopy
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;
}