gpt4 book ai didi

android - 在 CursorTreeAdapter 类的 getChildrenCursor() 方法中异步查询数据库的模式

转载 作者:太空宇宙 更新时间:2023-11-03 13:37:00 26 4
gpt4 key购买 nike

我已经为我从 CursorTreeAdapter 扩展的 ExpandableListView 实现了自定义适配器类(class)。一切都按预期工作。

但我想知道在 getChildrenCursor() 中是否存在关于如何异步查询数据库的模式或某种最佳实践适配器类的方法。目前我正在将我的 SQLiteOpenHelper 类传递给我的适配器的构造函数并在 getChildrenCursor() 中使用它在 UI 线程上同步查询数据库。

最佳答案

您也可以使用 CursorLoader 而不是 AsyncTask 的子类来异步查询提供者。

public Loader<Cursor> onCreateLoader(int id, Bundle args) {
if (id != -1) {
// child cursor
return new CursorLoader(getActivity(), childrenUri,
CHILDREN_PROJECTION, selection, selectionArgs, sortOrder);
} else {
// group cursor
return new CursorLoader(getActivity(), groupsUri,
GROUPS_PROJECTION, selection, null, sortOrder);
}

}

public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
int id = loader.getId();
if (id != -1) {
// child cursor
if (!data.isClosed()) {
try {
mAdapter.setChildrenCursor(id, data);
} catch (NullPointerException e) {
Log.w("TAG",
"Adapter expired, try again on the next query: "
+ e.getMessage());
}
}

} else {
// group cursor
mAdapter.setGroupCursor(data);
}
}

public void onLoaderReset(Loader<Cursor> loader) {
int id = loader.getId();
if (id != -1) {
// child cursor
mAdapter.setChildrenCursor(id, null);
} else {
// group cursor
mAdapter.setGroupCursor(null);
}
}

并且在您的适配器类中,您可以像这样覆盖 getChildrenCursor() 方法:

protected Cursor getChildrenCursor(Cursor groupCursor) {
// Given the group, we return a cursor for all the children within that group
int id = groupCursor.getInt(groupCursor
.getColumnIndex(ContactsContract.Groups._ID));
mActivity.getLoaderManager().initLoader(id, null,mFragment);
return null;
}

关于android - 在 CursorTreeAdapter 类的 getChildrenCursor() 方法中异步查询数据库的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5771303/

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