通过重写listview的adapter,将listview和checkbox结合在一起,并且二者可以分别操作。
| 
 1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
30 
31 
32 
33 
34 
35 
36 
37 
38 
39 
40 
41 
42 
43 
44 
45 
46 
47 
48 
49 
50 
51 
52 
53 
54 
 | 
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:orientation="vertical">      <ListView        android:id="@+id/android:list"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:layout_weight="2.0"        android:scrollbars="vertical"
/>     <TextView        android:id="@+id/foodname"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:layout_weight="1.0"        android:textSize="20dp"        android:text=""
/>       <TextView        android:id="@+id/price"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:layout_weight="1.0"        android:textSize="20dp"        android:text=""
/>     <LinearLayout
        android:layout_width="fill_parent"        android:layout_height="wrap_content">
        <Button            
android:id="@+id/call"            
android:layout_width="wrap_content"            
android:layout_height="wrap_content"            
android:background="@drawable/thphone1"            
android:layout_weight="1.0"        android:textSize="20dp"            
android:text="电话订餐"
/>          
<Button        android:id="@+id/cancelButton"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_weight="1.0"        android:textSize="20dp"        android:text="取消"
/>          
    </LinearLayout>
      </LinearLayout> | 
| 
 1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
30 
31 
32 
33 
34 
35 
36 
37 
 | 
<?xml
version="1.0"
encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"    android:id="@+id/RelativeLayout01"    android:layout_width="fill_parent"    android:layout_height="wrap_content"    android:paddingBottom="4dip"    android:paddingLeft="12dip"    android:paddingRight="12dip"
> <CheckBox        android:id="@+id/CheckBox01"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentRight="true"        android:focusable="false"         
android:clickable="false"        android:focusableInTouchMode="false"
        android:gravity="center_vertical"        android:paddingTop="12dip"
        >
    </CheckBox>
    <TextView        android:id="@+id/topTextView"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:text="TextView1"        android:textSize="20dip"
/>     <TextView        android:id="@+id/bottomTextView"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:layout_below="@+id/topTextView"        android:text="TextView2"
>     </TextView>
</RelativeLayout> | 
| 
 1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
30 
31 
32 
33 
34 
35 
36 
37 
38 
39 
40 
41 
42 
43 
44 
45 
46 
47 
48 
49 
50 
51 
52 
53 
54 
55 
56 
57 
58 
59 
60 
61 
62 
63 
64 
65 
66 
67 
68 
69 
70 
71 
72 
73 
74 
75 
76 
77 
78 
79 
80 
81 
82 
83 
84 
85 
86 
87 
88 
89 
90 
91 
92 
93 
94 
95 
96 
97 
98 
99 
100 
101 
102 
103 
104 
105 
106 
107 
108 
109 
110 
111 
112 
113 
114 
115 
116 
117 
118 
119 
120 
121 
122 
123 
124 
125 
126 
127 
128 
129 
130 
131 
132 
133 
134 
135 
136 
137 
138 
139 
140 
141 
142 
143 
144 
145 
146 
147 
148 
149 
150 
151 
152 
153 
154 
155 
156 
157 
158 
159 
160 
161 
162 
163 
164 
165 
166 
167 
168 
169 
170 
171 
172 
173 
174 
175 
176 
177 
178 
179 
180 
181 
182 
183 
184 
185 
186 
187 
188 
189 
190 
191 
192 
193 
194 
195 
196 
197 
198 
199 
200 
201 
202 
203 
204 
205 
206 
207 
208 
209 
 | 
package 
com.amaker.wlo; import
java.io.InputStream; import
java.net.URL; import
java.net.URLConnection; import
java.util.ArrayList; import
java.util.HashMap; import
java.util.List; import
javax.xml.parsers.DocumentBuilder; import
javax.xml.parsers.DocumentBuilderFactory; import
org.w3c.dom.Document; import
org.w3c.dom.NodeList; import
android.app.Activity; import
android.content.Context; import
android.content.Intent; import
android.content.SharedPreferences; import
android.content.pm.PackageManager.NameNotFoundException;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import
com.amaker.util.HttpUtil; public
class MenuActivity 
extends Activity { 
    private
ListView listview;     private
TextView totalPrice;     private
TextView totalFood;     private
Button callBtn;     private
Button cancleBtn;     @Override    protected
void onCreate(Bundle savedInstanceState) {
        
super.onCreate(savedInstanceState);
        
setContentView(R.layout.activity_menu);          
        
listview=(ListView)findViewById(android.R.id.list); 
         
         
totalPrice=(TextView)findViewById(R.id.price);           
         
totalFood=(TextView)findViewById(R.id.foodname); 
          
         
callBtn=(Button)findViewById(R.id.call);          
callBtn.setOnClickListener(callListener);           
         
cancleBtn=(Button)findViewById(R.id.cancelButton); 
         
cancleBtn.setOnClickListener(canclelistener);           
         
Context context=null;
            
try {                 
context= createPackageContext("com.amaker.wlo", Context.CONTEXT_IGNORE_SECURITY);
            
} catch 
(NameNotFoundException e) {                
// TODO Auto-generated catch block                
e.printStackTrace();             
}             
SharedPreferences preferences = context.getSharedPreferences("shop_id", MODE_WORLD_WRITEABLE);
            
int shopid=preferences.getInt("shopid",
0);              
           
          
        
String urlStr = HttpUtil.BASE_URL + "servlet/FoodServlet?shopId="+shopid;
        
try {             
// 实例化URL             
URL url = new URL(urlStr);
            
// URLConnection 实例             
URLConnection conn = url.openConnection();             
// 获得输入流             
InputStream in = conn.getInputStream();             
// 获得DocumentBuilderFactory对象             
DocumentBuilderFactory factory = DocumentBuilderFactory                    
.newInstance();             
// 获得DocumentBuilder对象             
DocumentBuilder builder = factory.newDocumentBuilder();             
// 获得Document对象             
Document doc = builder.parse(in);             
// 获得节点列表             
NodeList nl = doc.getElementsByTagName("food");
            
// Spinner数据             
ArrayList<HashMap<String, Object>> listitem = new
ArrayList<HashMap<String, Object>>();             
// 获得XML数据             
for (int
i = 0; i < nl.getLength(); i++) {
               
// 商家編號                 
// 商家名字foodPrice                 String foodName = doc.getElementsByTagName("foodName")
                       
.item(i).getFirstChild().getNodeValue();                
String foodPrice = doc.getElementsByTagName("foodPrice")
                       
.item(i).getFirstChild().getNodeValue();                
HashMap<String, Object> map = new
HashMap<String, Object>();                
map.put("foodName", foodName);
               
map.put("foodPrice", foodPrice+"元");
               
listitem.add(map);             
}             
MenuListAdapter listAdapter = new
MenuListAdapter(this,listitem, R.layout.listview_style,
                   
new String[] { 
"foodName", "foodPrice"
},                     
new int[] { R.id.topTextView, R.id.bottomTextView }
            
);              
            
listview.setAdapter(listAdapter);             
listview.setOnItemClickListener(getMenu);         
}catch 
(Exception e) {             
e.printStackTrace();         
}          
         
    }
         OnItemClickListener getMenu=new
OnItemClickListener() {          
        
int sumprice=0; 
//定义一个存储所有价格的变量         
String sumfood=""; 
//定义一个存储所有食物的变量         
@Override        
public void 
onItemClick(AdapterView<?> parent, View view, int
position,                
long id) { 
             
               
RelativeLayout lr = (RelativeLayout) view;                
               
             
               
               
               
               
TextView tvtop = (TextView) lr.getChildAt(1);
                
               
String foodName=tvtop.getText().toString()+" ";
                
                
                
                
               
TextView tv = (TextView) lr.getChildAt(2);
               
               
String s = tv.getText().toString();                
              
int foodprice=Integer.parseInt(s.substring(0, s.indexOf("元")));
               
               
              
              
             
// 取得ViewHolder对象,这样就省去了通过层层的findViewById去实例化我们需要的cb实例的步骤
               ViewHolder holder = (ViewHolder) view.getTag();
               
// 改变CheckBox的状态                 
holder.cb.toggle();                
// 将CheckBox的选中状况记录下来                 
MenuListAdapter.getIsSelected().put(position, holder.cb.isChecked());                 
// 调整选定条目                 
if (holder.cb.isChecked() == true) {
                   
sumprice=sumprice+foodprice;                    
sumfood=sumfood+foodName;                
} else 
{                    
sumprice=sumprice-foodprice;                    
sumfood=sumfood.replace(foodName, "");
                    
               
}                
// 用TextView显示                 
totalPrice.setText("你預計消費:  "+sumprice);
                   
                   
               
totalFood.setText("你已經點了:  "+sumfood);
                
               
             
        
}     };
          
           
        
OnClickListener callListener=new
OnClickListener() {          
        
@Override        
public void 
onClick(View v) {             
Context context=null;
            
try {                 
context= createPackageContext("com.amaker.wlo", Context.CONTEXT_IGNORE_SECURITY);
            
} catch 
(NameNotFoundException e) {                
// TODO Auto-generated catch block                
e.printStackTrace();             
}             
SharedPreferences pref = context.getSharedPreferences("phoneinfo", MODE_WORLD_WRITEABLE);
            
String PhoneNum=pref.getString("PhoneNum",
"");             
Intent intent = new
Intent(Intent.ACTION_CALL,Uri.parse("tel:"+PhoneNum));  
            
startActivity(intent);                
        
}     };
               
    OnClickListener canclelistener=new
OnClickListener() {          
        
@Override        
public void 
onClick(View v) {             
Intent intent=new
Intent(MenuActivity.this,MainMenuActivity.class);
            
startActivity(intent);              
        
}     };
                
         
} | 
| 
 1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
30 
31 
32 
33 
34 
35 
36 
37 
38 
39 
40 
41 
42 
43 
44 
45 
46 
47 
48 
49 
50 
51 
52 
53 
54 
55 
56 
57 
58 
59 
60 
61 
62 
63 
64 
65 
66 
67 
68 
69 
70 
71 
72 
73 
74 
75 
76 
77 
78 
79 
80 
81 
82 
83 
84 
85 
86 
87 
88 
89 
 | 
package 
com.amaker.wlo; import
java.util.ArrayList; import
java.util.HashMap; import
java.util.List; import
java.util.Map; import
android.content.Context; import
android.view.LayoutInflater; import
android.view.View; import
android.view.ViewGroup; import
android.widget.BaseAdapter; import
android.widget.CheckBox; import
android.widget.SimpleAdapter; import
android.widget.TextView; public
class MenuListAdapter 
extends SimpleAdapter {
    // 用来控制CheckBox的选中状况
    private static
HashMap<Integer, Boolean> isSelected;     // 用来导入布局
    private LayoutInflater inflater =
null;     private
List<? extends 
Map<String, ?>> Mdata;     public
MenuListAdapter(Context context,             
List<? extends 
Map<String, ?>> data, int 
resource, String[] from,             
int[] to) {         
super(context, data, resource, from, to);
        
this.Mdata=data; 
        
isSelected=new 
HashMap<Integer, Boolean>();         
inflater = LayoutInflater.from(context);         
initDate();     }
         private
void initDate(){ 
        
for(int
i=0; i<Mdata.size();i++) {
            
getIsSelected().put(i,false);
        
}     }
    @Override    public
View getView(int
position, View convertView, ViewGroup parent) {         
ViewHolder holder = null;
        
if (convertView == 
null) {             
// 获得ViewHolder对象             
holder = new ViewHolder();
            
// 导入布局并赋值给convertview             
convertView = inflater.inflate(R.layout.listview_style, null);
            
holder.tv1 = (TextView) convertView.findViewById(R.id.topTextView);
            
holder.tv2 = (TextView) convertView.findViewById(R.id.bottomTextView);
            
holder.cb = (CheckBox) convertView.findViewById(R.id.CheckBox01);
            
// 为view设置标签             
convertView.setTag(holder);         
} else 
{             
// 取出holder             
holder = (ViewHolder) convertView.getTag();         
}         
// 设置list中TextView的显示         
//holder.tv1.setText();         holder.tv1.setText(((Map)getItem(position)).get("foodName").toString());
        
holder.tv2.setText(((Map)getItem(position)).get("foodPrice").toString());
        
// 根据isSelected来设置checkbox的选中状况         
holder.cb.setChecked(getIsSelected().get(position));         
return convertView; 
    }
    public
static HashMap<Integer, Boolean> getIsSelected() {
        
return isSelected; 
    }
    public
static void 
setIsSelected(HashMap<Integer, Boolean> isSelected) {         
MenuListAdapter.isSelected = isSelected;     }
} class
ViewHolder {     TextView tv1;
    TextView tv2;
    CheckBox cb;
} | 
android开发中 listview和checkbox结合
原文:http://blog.csdn.net/u014311022/article/details/42389181