gpt4 book ai didi

android - 如果 SimpleCursorAdapter 关闭,则 ListView 为空()

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:07:47 25 4
gpt4 key购买 nike

当我在 cursor 对象上调用 close() 方法时,我无法理解为什么我的 ListActivity 及其对应的 listView 是空的?

让我解释一下......

我从数据库中检索了一些值并将结果保存在我的游标对象中。之后,我创建了我的 SimpleCursorAdapter 并将数据库中的列与我的 listView 中的字段绑定(bind)。

工作起来很有魅力,但是......

如果我在 onCreate() 方法结束时调用 cursor.close(),我的 listView 会显示为空吗?

如果我将游标中的值记录到 LogCat,在调用 cursor.close() 之前,它们一直存在,这非常合理,但为什么当 cursor.close( ) 被称为???我希望 ListAdapter listAdapter = new SimpleCursorAdapter(...) 保留“绑定(bind)”到 listView 的值,直到我们的 Activity 被销毁...

为什么会这样?何时以及为什么需要关闭游标?

public class ListTrainingsView extends ListActivity{
private SQLiteDatabase db;
private ListAdapter listAdapter;
private Cursor cursor;

@Override
public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);
setContentView(R.layout.list_trainings);

DatabaseHelper helper = new DatabaseHelper(this);

this.db = helper.getWritableDatabase();

this.cursor = db.query("trainings", fields, null, null, null, null, null);

startManagingCursor(cursor);

this.listAdapter = new SimpleCursorAdapter(this,
R.layout.list_trainings_item,
cursor,
new String[] {"name"},
new int[] { R.id.name_entry}
);

this.setListAdapter(this.listAdapter);

//If I call
//cursor.close();
//shown list is empty

另一个问题更多的是基本 Java 语言类型的问题......我来自 PHP OO 背景,如果你定义成员变量,你必须使用语法 $this->cursor< 在对象方法中使用它/em>。我注意到在 Android/Java 中我不必使用 this.cursor.getCount() 从中获取引用/值。说 cursor.getCount() 就够了,为什么允许这样做?

最佳答案

在您的 Activity 被销毁之前(即在 onDestroy() 中)您不应该关闭您的游标,因为 CursorAdapter 的实现期望它打开以便能够重新查询和过滤它。

由于您无论如何都在调用 startManagingCursor,因此您的 Activity 会在适当的 Activity 生命周期事件发生时自动停用、重新查询和关闭光标,因此您无需自行关闭它。

关于android - 如果 SimpleCursorAdapter 关闭,则 ListView 为空(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7901578/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com