Android - 带自定义建议的搜索对话框

时间:2013-04-08 11:42:19

标签: android search

我有一个搜索对话框,需要从数据库启用建议,如http://developer.android.com/images/search/search-suggest-custom.png所示。

当我点击操作栏菜单项时,我的搜索对话框将显示在顶部。当用户开始输入某些文本时,它应该搜索数据库并相应地显示建议。截至目前,我有一个搜索对话框,但当用户输入某些文本时,不会显示任何建议。

我的内容提供商:

public class MyCustomSuggestionProvider extends ContentProvider {
    SQLiteDatabase db;
    SQLiteQueryBuilder qb;
    String sqlTables = "countries";

    @Override
    public int delete(Uri uri, String selection, String[] selectionArgs) {
        return 0;
    }

    @Override
    public String getType(Uri uri) {
        return null;
    }

    @Override
    public Uri insert(Uri uri, ContentValues values) {
        return null;
    }

    @Override
    public boolean onCreate() {

        return false;
    }
    public Cursor query(Uri uri, String[] projection, String selection,
            String[] selectionArgs, String sortOrder) {
        MyDatabase myDB = new MyDatabase(getContext());
        db = myDB.getReadableDatabase();
        Cursor c = null;

        if (selectionArgs != null && selectionArgs.length > 0
                && selectionArgs[0].length() > 0) {

            qb = new SQLiteQueryBuilder();
            String[] sqlSelect = { "name" };
            qb.setTables(sqlTables)

                c = qb.query(db, null, selection, selectionArgs, null, null,
                        null);
                c.moveToFirst();
        } else {
            return null;
        }
        return c;
    }
    @Override
    public int update(Uri uri, ContentValues values, String selection,
            String[] selectionArgs) {
        return 0;
    }

}

我的清单:

    <application
            android:allowBackup="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/Theme.Visa" >
            <provider
                android:name="com.m7.visa.contentprovider.MyCustomSuggestionProvider"
                android:authorities="com.m7.visa.contentprovider.MyCustomSuggestionProvider" >
            </provider>

            <activity
                android:name="com.m7.visa.MainActivity"
                android:label="@string/app_name" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />

                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
                <intent-filter>
                    <action android:name="android.intent.action.SEARCH" />
                </intent-filter>

                <meta-data
                    android:name="android.app.searchable"
                    android:resource="@xml/searchable" />
            </activity>
</application>

我的可搜索配置:

<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
    android:hint="hint..."
    android:label="@string/app_name"
    android:searchSuggestAuthority="com.m7.visa.contentprovider.MyCustomSuggestionProvider"
    android:searchSuggestIntentAction="android.intent.action.VIEW"
    android:searchSuggestSelection=" ?" >

</searchable>

任何想法我哪里出错了?

2 个答案:

答案 0 :(得分:4)

问题出在问号android:searchSuggestSelection=" ?" >中。当你在搜索视图中输入'something'时,它会传递'som​​ething',左边是空格。所以解决方案是删除空间,但'?'是Android XML文件中的一个特殊字符,这意味着你必须逃避它。

所以最终的解决方案是android:searchSuggestSelection="\?" >

答案 1 :(得分:1)

尝试删除第android:searchSuggestSelection=" ?" >

处的空格

android:searchSuggestSelection="?" >