我正在浏览Google Android开发人员网站上Retrieving a List of Contacts的基本教程。 部分:匹配任何类型。
我已经设置了我的列表视图,它会按预期显示搜索结果,但我想按显示名称(Contacts.DISPLAY_NAME_PRIMARY)进行排序。目前它只是一个看似随机的混乱。
有问题的代码如下:
@Override
public Loader<Cursor> onCreateLoader(int loaderId, Bundle args) {
/*
* Appends the search string to the base URI. Always
* encode search strings to ensure they're in proper
* format.
*/
Uri contentUri = Uri.withAppendedPath(
Contacts.CONTENT_FILTER_URI,
Uri.encode(mSearchString));
// Starts the query
return new CursorLoader(
getActivity(),
contentUri,
PROJECTION,
null,
null,
Contacts.DISPLAY_NAME_PRIMARY // <- SORT THIS, PLEASE!
);
}
当我使用 Contacts.CONTENT_URI 作为我的contentUri来显示所有联系人时,排序按预期正常工作。
为什么它不能用于过滤结果?
答案 0 :(得分:0)
好的,我设法回答了我自己的问题!
查看示例Google代码,我设法找到了这一行:
final static String SORT_ORDER =
Utils.hasHoneycomb() ? Contacts.SORT_KEY_PRIMARY : Contacts.DISPLAY_NAME;
所以,我需要在设备上使用 Contacts.SORT_KEY_PRIMARY &gt;蜂窝, 设备上的 Contacts.DISPLAY_NAME &lt;蜂窝状。
一些不理解的示例代码:
@Override
public Loader<Cursor> onCreateLoader(int loaderId, Bundle args) {
/*
* Appends the search string to the base URI. Always
* encode search strings to ensure they're in proper
* format.
*/
Uri contentUri = Uri.withAppendedPath(
Contacts.CONTENT_FILTER_URI,
Uri.encode(mSearchString));
String sortOrder;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
{
sortOrder = Contacts.SORT_KEY_PRIMARY;
}
else
{
sortOrder = Contacts.DISPLAY_NAME;
}
// Starts the query
return new CursorLoader(
getActivity(),
contentUri,
PROJECTION,
null,
null,
sortOrder // Sorted by name
);
}
我测试了它并且它有效。希望这有助于其他任何人。