我有一个ListActivity,它会为每一行显示三个小部件。其中一个是复选框。
public class GroceryItems extends ListActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.grocery_items_list);
setUpData();
}
在我的setUpData()中,我使用的是SimpleAdapter(这是一个测试用例)。
private void setUpData(){
// generate the maps
String[] from = new String[] {"checked", "item_name","quantity"};
int[] toDisplay = new int[] {R.id.checkbox1, R.id.text1, R.id.text2};
List<HashMap<String, Object>> fillMaps = new ArrayList<HashMap<String, Object>>();
for(int i = 0; i < 20; i++){
HashMap<String, Object> map = new HashMap<String, Object>();
if(i==3){
map.put("checked", false);
}
else{
map.put("checked", true);
}
map.put("item_name", items[i]);
map.put("quantity","3");
fillMaps.add(map);
}
ListView lv= getListView();
SimpleAdapter adapter = new SimpleAdapter(this, fillMaps, R.layout.common_rowitem, from, toDisplay);
lv.setAdapter(adapter);
CheckBox cb = (CheckBox) lv.findViewById(R.id.checkbox1);
cb.setOnCheckedChangeListener(new OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton cb, boolean isChecked) {
if(cb.isChecked()) {
// action
}
else {
// action
}
}
});
}
在findViewById上,我总是返回null并且无法添加侦听器。我也试过使用视图绑定器
adapter.setViewBinder(new SimpleAdapter.ViewBinder() {
public boolean setViewValue(View view, Object data,
String textRepresentation) {
if (view.getId()==R.id.checkbox1){
CheckBox cb = (CheckBox) view;
if (data != null){
cb.setChecked((Boolean)data);
return true;
}
}
return false;
}
});
这也无法安装处理程序。
以下是两个布局视图
grocery_items_list.xml
<?xml version="1.0" encoding="utf-8"?>
<ListView android:id="@+id/android:list"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
common_rowitem.xml
<?xml version="1.0" encoding="utf-8"?>
感谢任何建议或帮助。