我有一个列表视图,显示数据库中的记录。列表视图中的每一行都有一个复选框。我怎么......
我一直在这里关注这个有用的教程://http://www.vogella.com/articles/AndroidSQLite/article.html
public class PhoneNumberDataBaseListView extends ListActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
NumbersDataSource datasource = new NumbersDataSource(this);
datasource.open();
String number = "123";
datasource.createNumber(number);
List<Number> values = datasource.getAllNumbers();
ArrayAdapter<Number> adapter = new ArrayAdapter<Number>(this, android.R.layout.simple_list_item_multiple_choice, values);
setListAdapter(adapter);
}
public void deleteNumber() {
NumbersDataSource datasource = new NumbersDataSource(this);
datasource.open();
ListView LV = (ListView) findViewById(android.R.id.list);
List<Number> values = datasource.getAllNumbers();
ArrayAdapter<Number> adapter = new ArrayAdapter<Number>(this, android.R.layout.simple_list_item_multiple_choice, values);
setListAdapter(adapter);
SparseBooleanArray checkedItems = LV.getCheckedItemPositions();
for (int i = 0; i < checkedItems.size(); i++) {
if(checkedItems.valueAt(i)) {
Number item = adapter.getItem(i);
Toast t = Toast.makeText(this, item.getNumber().toString(), Toast.LENGTH_LONG);
t.show();
}
}
}
答案 0 :(得分:0)
方法getCheckedItemPositions()返回SparseBooleanArray,指示检查哪些项目(如果选中了特定位置上的项目,则在该数组上调用的方法valueAt(position)返回true)。您正在使用的教程中的类DBAdapter为您提供了deleteTitle(long rowId)方法,您应该使用它来实现您想要的内容。因此,您的代码应该看起来或多或少像这样:
SparseBooleanArray checkedItems = listView.getCheckedItemPositions();
for (int i = 0; i < checkedItems.size(); i++) {
if(checkedItems.valueAt(i)) {
db.deleteTitle(adapter.getItemId(i));
}
}
当然,SimpleCursorAdapter和DBAdapter应存储在对象属性中,以便您可以从两种方法(onCreate和deleteRecord)访问它们。顺便说一下,不需要传递给deleteRecord方法的View参数。