3
SimpleAdapter adapter = new SimpleAdapter(this, list, R.layout.contact_item, new String[] { "name" }, new int[] { R.id.name });
listView.setAdapter(adapter);
listView.setItemsCanFocus(false);
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
listView.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        CheckedTextView checkedTextView = (CheckedTextView) view.findViewById(R.id.name);
        checkedTextView.toggle();
        System.out.println(checkedTextView.getText().toString());
    }
});

当我单击ListView中的第一项时,CheckedTextView会选择ListView中的最后一项,并且System.out是正确的。我不知道为什么,我该如何解决?

4

1 回答 1

0

ViewListView在实例的实际行中使用的 s经常被回收:通常显示层将创建与View可见行一样多的对象,然后循环遍历它们。选择使用嵌入的行View通常很棘手:当您单击行中的特定视图时,文本可能是正确的,但系统可能不知道要选择哪一行。尝试使用位置调用setSelection以强制选择正确的行。

编辑:不保证,但尝试这样做,看看它是否有效。

listView.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        CheckedTextView checkedTextView = (CheckedTextView) view.findViewById(R.id.name);
        checkedTextView.toggle();
        System.out.println(checkedTextView.getText().toString());
        getListView().setSelection(position);
    }
});
于 2012-04-13T06:40:23.763 回答