在ListView中删除多个选定的项目

时间:2013-01-21 21:56:59

标签: android sqlite listview multiple-choice

我有一个列表视图,显示数据库中的记录。列表视图中的每一行都有一个复选框。我怎么......

  1. 创建一个显示所选项目值的Toast消息?
  2. 确定用户在列表视图中选择的记录?
  3. 遍历每个所选项目并仅从数据库中删除列表视图中选择的行?
  4. 我一直在这里关注这个有用的教程://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();
                 }  
            }
        }
    

1 个答案:

答案 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参数。