排序CONTENT_FILTER_URI结果

时间:2015-11-05 19:03:40

标签: java android listview android-cursorloader

我正在浏览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来显示所有联系人时,排序按预期正常工作。

为什么它不能用于过滤结果?

1 个答案:

答案 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
    );
}

我测试了它并且它有效。希望这有助于其他任何人。