Android开发 - 使用simple_list_item_multiple_choice和CHOICE_MODE_MULTIPLE的isChecked Checkbox

时间:2012-03-16 23:00:45

标签: android checkboxlist ischecked

我正在使用simple_list_item_multiple_choice和list.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);创建从数据库查询填充的复选框列表。然后我使用onListItemClick处理列表的单击,再次正常工作。我无法做到的事情(5天后)是根据是否选中了附加到列表项的复选框来编写if语句。我需要的是相当于下面的例子,它适用于一个复选框,我可以使用android:onClick元素来触发下面的方法。

public void onCheckboxClicked(View v) {
        // Perform action on clicks, depending on whether it's now checked
        if (((CheckBox) v).isChecked()) {
            Toast.makeText(this, "Selected", Toast.LENGTH_SHORT).show();
        } else {
            Toast.makeText(this, "Not selected", Toast.LENGTH_SHORT).show();
        }
    }

这对我的应用程序至关重要,因此我们将非常感谢任何建议。下面是simpleCusrorAdapter正在使用:

 Cursor cursor3 = db.rawQuery("SELECT _id, symname FROM tblsymptoms WHERE _id IN ("+sympresult+") ", null);

        adapter = new SimpleCursorAdapter(
                this, 
                android.R.layout.simple_list_item_multiple_choice,
                cursor3, 
                new String[] {"symname","_id"}, 
                new int[] {android.R.id.text1});
        setListAdapter(adapter);
        ListView list=getListView();
        list.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);

2 个答案:

答案 0 :(得分:3)

找到这个非常有用的blog item

后,我解决了这个问题

我将onListItemClick更改为以下内容,它就像一个梦想:

public void onListItemClick(ListView parent, View view, int position, long id) {


      CheckedTextView check = (CheckedTextView)view;
      check.setChecked(!check.isChecked());
      boolean click = !check.isChecked();
      check.setChecked(click);
      if (click) {
            Toast.makeText(this, "Not Selected", Toast.LENGTH_SHORT).show();
      } else {
          Toast.makeText(this, "Selected", Toast.LENGTH_SHORT).show();
      } 
}

答案 1 :(得分:0)

如果我理解正确,列表中的每一行都有一个复选框。当选择列表中的项目时,您希望能够判断是否选中了相应的复选框?

尝试在每个列表项View对象上使用setTag(...)方法。然后,当调用onListItemClick()方法时,您可以在视图上调用getTag(...)(它将返回您的复选框)。我假设您使用自定义适配器填充列表。在填充时你想要打电话:

   setTag( CHECKBOX_KEY, checkbox );

例如:

protected void onListItemClick(ListView l, View v, int position, long id) {
    CheckBox cb = (CheckBox)v.getTag( CHECKBOX_KEY );

    boolean isChecked = false;

    if( null != cb ) {
        isChecked = cb.isChecked();
    }

    // .. do whatever you have to here...    

}

希望这会有所帮助......