Android – 如何从游标中删除项目?

假设我使用以下光标来获取某人的通话记录:

String[] strFields = { android.provider.CallLog.Calls.NUMBER, android.provider.CallLog.Calls.TYPE, android.provider.CallLog.Calls.CACHED_NAME, android.provider.CallLog.Calls.CACHED_NUMBER_TYPE }; String strOrder = android.provider.CallLog.Calls.DATE + " DESC"; Cursor mCallCursor = getContentResolver().query( android.provider.CallLog.Calls.CONTENT_URI, strFields, null, null, strOrder ); 

现在我将如何删除此光标中的第i项? 这也可能是一个光标获取音乐列表等等。所以我必须问 – 这甚至可能吗? 我可以理解某些游标不允许第三方应用程序从中删除。

谢谢。

抱歉,您无法从光标中删除。

您必须使用ContentResolver或某种SQL调用。

您可以使用MatrixCursor进行操作。 使用此策略,您复制光标,并省略要排除的行。 这显然对于大型游标效率不高,因为您将整个数据集保留在内存中。

您还必须在MatrixCursor的构造函数中重复String列的String数组。 你应该把它保持为常数。

  String exclueRef = <> MatrixCursor newCursor = new MatrixCursor(new String[] {"column A", "column B"); if (cursor.moveToFirst()) { do { // skip the copy of this one .... if (cursor.getString(0).equals(exclueRef)) continue; newCursor.addRow(new Object[]{cursor.getString(0), cursor.getString(1)}); } while (cursor.moveToNext()); } 

我经常与此作斗争; 试图只使用游标和内容提供者制作我的应用程序,尽可能远离对象映射。 你应该看看我的一些ViewBinders …… 🙂