我正在使用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);
答案 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...
}
希望这会有所帮助......