ListView里的每个item有两个textView跟一个checkBox

ListView里的每个item有两个textView和一个checkBox我想做一个listview,这个listview里面的每一个Item有两

ListView里的每个item有两个textView和一个checkBox
   我想做一个listview,这个listview里面的每一个Item有两个一个checkbox。listview如果只是放一个textview和一个checkBOX的时候就可以,但是如果我修改成两个就不行。下面是代码:
声明:此代码是模仿http://www.apkbus.com/android-18656-1-1.html里面的,个人觉得很好,新手可以一起学习。
   MainActivity类:

package com.example.checkbox;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.ListView;
import android.widget.TextView;

public class MainActivity extends Activity {
TextView tv = null;
ListView lv = null;
TextView price = null;
String name[] = {"G1","G2","G3","G4","G5","G6"};
String priceStr[] ={"10","20","25","30","40","50"};
ArrayList <String> listStr = null;
private List<HashMap<String, Object>> list = null;
private MyAdapter adapter = null;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView) this.findViewById(R.id.text);
price = (TextView) this.findViewById(R.id.item_price);
lv = (ListView) this.findViewById(R.id.listview);
showCheckBoxListView();

}

public void showCheckBoxListView(){
list = new ArrayList<HashMap<String,Object>>();
for(int i = 0;i<name.length;i++){
HashMap<String,Object> map = new HashMap<String,Object>();
map.put("item_tv", name[i]);
map.put("item_price", priceStr[i]);
map.put("item_cb", false);
list.add(map);

adapter = new MyAdapter(this,list,R.layout.list,new String[]{"item_tv","item_cb"},new int[]{R.id.item_tv,R.id.item_cb});
lv.setAdapter(adapter);
listStr = new ArrayList<String>();
lv.setOnItemClickListener(new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> arg0, View view,
int position, long arg3) {
ViewHolder holder = (ViewHolder) view.getTag();


holder.cb.toggle();//在每次获得点击时,都获得checkbox的状态的改变
MyAdapter.isSelect.put(position, holder.cb.isChecked());//同时修改map值得保存状态
if(holder.cb.isChecked() == true){
          listStr.add(name[position]);
          
}else{
listStr.remove(name[position]);
}
tv.setText("以选中"+ listStr.size()+"项");
}
});
}
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}





/*************MyAdapter类**********************************/
public static class MyAdapter extends BaseAdapter{
public static HashMap<Integer,Boolean> isSelect = null;
private Context context = null;
private LayoutInflater inflater = null;  
private List<HashMap<String,Object>> list = null;
private String keyString[] = null;
private int idValue[] = null;
private String itemName = null;  //作为每一项item中的textview显示的
private String itemPrice = null; 


public MyAdapter(Context context,List<HashMap<String,Object>> list,int resource ,String[] from,int[] to){
this.context = context;
this.list = list;
keyString = new String[from.length];
idValue = new int[to.length];
System.arraycopy(from, 0, keyString, 0, from.length);
System.arraycopy(to, 0, idValue, 0, to.length);
inflater = LayoutInflater.from(context);
init();

}


public void init(){
isSelect = new HashMap<Integer, Boolean>();
for(int i=0;i<list.size();i++){
isSelect.put(i, false);
}
}
@Override
public int getCount() {
return list.size();
}

@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return list.get(arg0);
}

@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return 0;
}

@Override


public View getView(int position, View view, ViewGroup arg2) {
ViewHolder holder = null;
if(holder == null){
holder = new ViewHolder();
if(view == null){
view = inflater.inflate(R.layout.list, null);
}
holder.tv = (TextView) view.findViewById(R.id.item_tv);
holder.price = (TextView) view.findViewById(R.id.item_price);
holder.cb = (CheckBox) view.findViewById(R.id.item_cb);
view.setTag(holder);

}else{
holder = (ViewHolder)view.getTag();
}
HashMap<String,Object> map = list.get(position);
if(map != null){
itemName = (String) map.get(keyString[0]);
itemPrice = (String) map.get(keyString[1]);
holder.tv.setText(itemName);
holder.price.setText(itemPrice);
}
holder.cb.setChecked(isSelect.get(position));
return view;
}

}

}





ViewHolder类


        android:layout_height="wrap_content"
        android:text="@string/hello_world" />

    <ListView
        android:id="@+id/listview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        ></ListView>
    </LinearLayout>
    
</LinearLayout>



list.xml代码
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout  xmlns:android="http://schemas.android.com/apk/res/android"  
    android:layout_width="fill_parent"  
    android:layout_height="55dip"  
    android:orientation="horizontal"  
    android:layout_marginTop="20dip">   
    
    <TextView 
        android:id="@+id/item_tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center_vertical"
        android:layout_marginLeft="10dip">
    </TextView>

 
    <TextView 
        android:id="@+id/item_price"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />
    
    
    <CheckBox
        android:id="@+id/item_cb"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:layout_marginRight="43dp"
        android:clickable="false"
        android:focusable="false"
        android:focusableInTouchMode="false" />



</RelativeLayout>



报错的信息是

09-17 02:42:24.745: E/AndroidRuntime(3032): FATAL EXCEPTION: main
09-17 02:42:24.745: E/AndroidRuntime(3032): java.lang.ClassCastException: java.lang.Boolean cannot be cast to java.lang.String
09-17 02:42:24.745: E/AndroidRuntime(3032): at com.example.checkbox.MainActivity$MyAdapter.getView(MainActivity.java:152)




checkbox listview
[解决办法]
152行
itemPrice = (String) map.get(keyString[1]);

类型是boolean

不是String,不要强转为String
[解决办法]
49行 map.put("item_cb", false);

52行 adapter = new MyAdapter(this,list,R.layout.list,new String[]{"item_tv","item_cb"},new int[]{R.id.item_tv,R.id.item_cb});

152行itemPrice = (String) map.get(keyString[1]);

请仔细看你这个  keyString[1] 其实是 item_cb

可能是你疏忽吧
你想要的效果应该是  把 52行 改为以下内容 adapter = new MyAdapter(this,list,R.layout.list,new String[]{"item_tv","item_price"},new int[]{R.id.item_tv,R.id.item_cb});