gpt4 book ai didi

android - 何时关闭 SimpleCursorAdapter 中使用的 Cursor

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:27:26 29 4
gpt4 key购买 nike

我正在使用 SimpleCursorAdapter 在 ListView 中显示结果,但由于我必须在搜索过程中多次查询我的数据库(使用 SearchView 小部件),我担心光标可能会保持打开状态。

这就是我查询数据库并在 ListView 中显示结果的方式:

class SearchCustomers extends AsyncTask<String,Void,Cursor>{

@Override
protected Cursor doInBackground(String... params) {
//get the query
String query=params[0].toLowerCase(Locale.getDefault());
Cursor cursor=mDB.searchCustomersByName((query != null ? query : "@@@@"));
return cursor;

}

@Override
protected void onPostExecute(Cursor result) {

if (result != null) {

String[] from = new String[] { QuickOrderDB.ID,
QuickOrderDB.NAME,
QuickOrderDB.ADDRESS,
QuickOrderDB.PHONE_NUMBER };

int[] to = new int[] { R.id.customerIDTextView,
R.id.customerNameTextView,R.id.customerAddressTextView ,
R.id.customerPhoneTextView };

SimpleCursorAdapter cursorAdapter = new SimpleCursorAdapter(SearchCustomersActivity.this,
R.layout.results_customer_item, result, from, to);
mResultsListView.setAdapter(cursorAdapter);

}
}

}

我已经尝试了很多方法来关闭光标,但即使我在 mResultsListView.setAdapter(cursorAdapter); 之后关闭它,结果总是一样的:一个空的 ListView.

我已经看到几个问题,其中提到游标将自动关闭,但我想确保这是真的。

有官方文档吗? SimpleCursorAdapter 真的会自动关闭光标吗?

提前致谢。

最佳答案

  1. 完成后需要关闭光标。在 setAdapter() 调用后关闭它会阻止适配器访问数据。因此,关闭游标的更好位置是在当前 Activity 期间关闭生命周期阶段,例如 onPause() 或 onStop()。 (不应使用 onDestroy(),因为 Android 运行时不能保证调用它。我认为最新版本的 onStop() 是有保证的)
  2. 我认为 SimpleCursorAdapter 适配器不会自动关闭游标。官方文件提到changeCursor()自动关闭旧光标,因此另一种选择是在搜索后更改光标。 http://developer.android.com/reference/android/widget/CursorAdapter.html#changeCursor(android.database.Cursor)

关于android - 何时关闭 SimpleCursorAdapter 中使用的 Cursor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26129109/

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