我是新手,所以我可能无法很好地解释情况。如果您需要更多信息,请告诉我。如何在自定义列表视图中查找其他(复选框)视图
我想实现这样一个ListView:
[textview][button][checkbox]
[textview][button][checkbox]
[textview][button][checkbox]
[textview][button][checkbox]
我希望其他复选框将自动取消选中当我点击其中的一个。所以它就像一个单一的选择。我写下面的代码可以实现多种选择,但是当我尝试将它切换到单一选择时,我遇到了麻烦。
in checkBoxOnClickListener我找不到其他(复选框)视图并切换它们。任何建议好朋友?如果你认为我的快递技能很差,请告诉我。
谢谢。
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);
}
if (data.get(0).get("value").equals("Male") || data.get(0).get("value").equals("Yes")) {
map.put(1, true);
}
}
@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(position);
checkBox.setOnClickListener(checkBoxOnClickListener);
return convertView;
}
public OnClickListener checkBoxOnClickListener = new OnClickListener() {
public void onClick(View v) {
// ((CheckBox) v).toggle();
boolean checked = ((CheckBox) v).isChecked();
if (checked) {
((CheckBox) v).setChecked(true);
} else {
((CheckBox) v).setChecked(false);
}
int p = (Integer) (v.getTag());
mSimpleAdapter.map.put(p, checked);
// this cannot works, helppp
ListView lv = ((ListView) (v.getParent().getParent()));
(CheckBox) cb = lv.findViewWithTag(1);
cb.toggle();
.....................
............... } }; }
谢谢托马斯。问题解决了。其实我只需要在有两行的情况下做出单一选择。该代码丑陋,但工作:ListView lv =(ListView)(v.getParent()。getParent()); \t \t \t \t \t View view = lv.findViewWithTag(Math.abs(p - 1)); \t \t \t \t \t CheckBox cb =(CheckBox)(view.findViewById(R.id.multiple_checkbox)); \t \t \t \t \t cb.toggle(); – ThinkChris 2010-11-19 00:19:01
我很高兴你能解决你的问题! :) – Thomas 2010-11-19 04:07:17