很抱歉让人感到困惑。我简化了问题,即复选框。基本上我想要一个像这样的列表视图,我想要在点击时切换复选框。
[TextView的] [复选框]
[TextView的] [复选框]
[TextView的] [复选框]
[TextView的] [复选框]
问题是复选框无法正常工作。当我点击一个复选框时,它永远不会被切换。
有人可以提出任何建议吗?谢谢。
这是我现在的代码:
public class MyAdapter extends SimpleAdapter {
Map<Integer, Boolean> map;
LayoutInflater mInflater;
private List<? extends Map<String, ?>> mList;
public MyAdapter(Context context, List<Map<String, String>> data, int resource, String[] from, int[] to) {
super(context, data, resource, from, to);
map = new HashMap<Integer, Boolean>();
mInflater = LayoutInflater.from(context);
mList = data;
for (int i = 0; i < data.size(); i++) {
map.put(i, false);
}
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = mInflater.inflate(R.layout.rapid_diagnosis_row, null);
}
TextView textView = (TextView) convertView.findViewById(R.id.multiple_question);
textView.setText((String) mList.get(position).get("value"));
CheckBox checkBox = (CheckBox) convertView.findViewById(R.id.multiple_checkbox);
checkBox.setChecked(map.get(position));
// save position and checking status into tag
checkBox.setTag(new int[] { position, checkBox.isChecked() == true ? 1 : 0 });
checkBox.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// get position and checking status from tag, works fine
int[] tag = (int[]) (v.getTag());
int p = tag[0];
int c = tag[1];
// try to get checking status from the clicked view, not works
// which is always true
boolean checked = ((CheckBox) v).isChecked();
// try to toggle the clicked (checkbox) view, not works
// the checkbox pressed never be toggled
((CheckBox) v).toggle();
// save status into a hashmap, works fine
mSimpleAdapter.map.put(p, (c == 1 ? true : false));
}
});
return convertView;
}
答案 0 :(得分:0)
我通过替换以下toggle()行解决了这个问题:
public void onClick(View v) {
// ((CheckBox) v).toggle();
boolean checked = ((CheckBox) v).isChecked();
if (checked) {
((CheckBox) v).setChecked(true);
} else {
((CheckBox) v).setChecked(false);
}
}
但是我仍然不明白为什么toggle()无法正常工作。
谢谢你们。