我应该关闭从适配器获得的光标吗?

Posted

技术标签:

【中文标题】我应该关闭从适配器获得的光标吗?【英文标题】:Should I close cursor gotten from adapter? 【发布时间】:2012-11-28 07:47:04 【问题描述】:

如果我有一个 SimpleCursorAdapter 并且我在我的实例化适配器上调用 getCursor(),我是否应该在完成后关闭这个游标,因为 java 是按值传递的?

简单示例:

SimpleCursorAdapter adapter = new SimpleCursorAdapter(.....);
myListView.setAdapter(adapter);

Cursor cursor = adapter.getCursor();
cursor.moveToFirst();
int id = cursor.getInt(0);
...?

如果我在这里关闭光标,是否会为适配器关闭?

【问题讨论】:

【参考方案1】:

如果我有一个 SimpleCursorAdapter 并且我在我的实例化适配器上调用 getCursor(),我是否应该在完成后关闭这个游标,因为 java 是按值传递的?

正如你所说,适配器仍在使用光标,所以不,你不应该关闭它。只有在完全完成使用光标时才应关闭光标。

【讨论】:

我的问题更多是关于返回的游标是否指向与适配器使用的游标相同的游标,因为按值传递。但我猜传值不适用于获取属性? 是的,是同一个Cursor。您始终可以在传递给 new SimpleCursorAdapter() 和测试 cursor == adapter.getCursor() 的光标上保存本地引用。 请注意,注意在 Java 中如何使用 ==... 仅用于比较原始对象(不包括字符串)和 instances(如上)。如果这对您来说是新的,请阅读 How do I compare strings in Java? 以获取有关 ==equals() 的详细说明。

以上是关于我应该关闭从适配器获得的光标吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何为列表视图创建自定义光标适配器以用于图像和文本?

简单的光标适配器需要最低 api 11 问题

如何从recyclerview适配器获取选定项目的数量?

在 MVVM 的适配器中启动意图是一个好习惯吗?

简单的光标适配器问题

我应该在生产中使用 rails5 ActiveJob 默认异步适配器来进行小型后台作业吗?