如何将[textview] [imagebutton] [checkbox]作为listview中的每一行

时间:2010-11-17 04:47:57

标签: android listview checkbox

很抱歉让人感到困惑。我简化了问题,即复选框。基本上我想要一个像这样的列表视图,我想要在点击时切换复选框。

  

[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;
    }

1 个答案:

答案 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()无法正常工作。

谢谢你们。