从android中的listview中删除项目

时间:2013-03-27 07:40:55

标签: android listview android-arrayadapter simplecursoradapter

我正在使用SimpleCursorAdapter从数据库中获取数据并将其显示在ListView中。 请有人告诉我如何从该列表中选择/删除一个或多个列表项。 或者至少告诉我如何使用ArrayAdapter从数据库中获取数据,以便在ListView中显示它。

教程将是最佳实践。

提前致谢。

1 个答案:

答案 0 :(得分:0)

  

请有人告诉我如何选择/删除一个或多个列表项   那份清单。

因此,您需要获取每行的id才能从数据库中删除正确的项目。当时从List中只删除一个项目的问题并不太棘手,只需创建一些OnItemClickListener或ContextMenu并提供给User delete选项。然后,如果您正在使用某些CursorAdapter,则从OnItemClick方法的long id参数自动获取所选项的rowId。在ContextMenu的情况下,您可以从AdapterView.ContextMenuInfo获取id。

如果您想要删除更多那个,那么问题就是这种情况,并且任何监听器或ContextMenu的使用都不够和有效。你应该决定创建自己的ListView行,你将拥有CheckBox,然后你可以简单地删除那一行。你去抛出List和CheckBox中检查的每一行从数据库中删除并使List刷新。这是我的第一个想法。

  

或者至少告诉我如何使用数据从数据库获取数据   ArrayAdapter在ListView中显示它。

如果您想使用ListAdapter(ArrayAdapter,BaseAdapter等),那么现在需要从数据库中获取记录列表。我建议你创建自己的ListAdapter子类,以获得对Adapter的更多控制。在这里,我建议您创建自己的Object,它将表示数据库中的表,其中Object的属性等于表中的列。然后只需从数据库中获取List。我将在下面给你伪代码。

实施例

public List<OwnObject> getAll() {
   List<OwnObject> items = new ArrayList<OwnObject>();
   OwnObject o = null; 
   Cursor c = null;
   try {
      db = helper.getReadableDatabase(); // or created some method as open();
      String query = "select * from TableName";
      c = db.rawQuery(query, null);
      if (c.moveToFirst()) {
         do {
            o = new OwnObject();
            o.setProperty1(c.getString(c.getColumnIndex("Column1")));
            o.setProperty2(c.getString(c.getColumnIndex("Column2")));
            o.setProperty3(c.getString(c.getColumnIndex("Column3")));
            ...
            items.add(o);

         } while (c.moveToNext());
      }
      return items;
   }
   finally {
      if (c != null) {
         c.close();
      }
      // close also db
   }
}