2014-04-01 98 views
1

我有一個建議啓用的搜索小部件。一切都很好,但爲了得到建議,我必須寫下整個單詞。Android搜索建議,爲什麼必須鍵入整個單詞的建議?

我已經設置了 - android:searchSuggestThreshold =「2」,但仍需要完成一個單詞(5-6)個字符,才能得到建議。爲什麼?

我真的非常感謝一些幫助。 謝謝!

清單:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.exploreca.tourfinder" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-permission android:name="android.permission.CALL_PHONE" /> 

    <uses-sdk 
     android:minSdkVersion="14" 
     android:targetSdkVersion="19" /> 

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_exploreca" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" >  
     <activity 
      android:name="com.exploreca.tourfinder.MainActivity" 
      android:label="@string/app_name" >    
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter>    
     </activity> 
     <activity 
      android:name=".SettingsActivity">    
     </activity> 
     <activity 
      android:name=".TourDetailActivity">    
     </activity>   
     <!-- Search results activity --> 
     <activity android:name=".SearchActivity"> 
      <intent-filter> 
       <action android:name="android.intent.action.SEARCH" /> 
      </intent-filter> 
      <meta-data 
       android:name="android.app.searchable" 
       android:resource="@xml/searchable" /> 
     </activity> 

     <meta-data 
       android:name="android.app.default_searchable" 
       android:value=".SearchActivity" /> 

     <provider 
     android:name=".SearchContentProvider" 
     android:authorities="com.exploreca.tourfinder.SearchContentProvider" > 
    </provider> 

    </application> 
</manifest> 

而且部分SearchContentProvider使用:

@Override 
public Cursor query(Uri uri, String[] projection, String selection, 
      String[] selectionArgs, String sortOrder) { 

    Log.i(LOGTAG, "The typed characters are: " + selectionArgs[0]); 

     SQLiteQueryBuilder builder = new SQLiteQueryBuilder(); 
     builder.setTables(ToursDBOpenHelper.TABLE_TOURS);   

     HashMap<String, String> columnMap = new HashMap<String, String>(); 
     columnMap.put(BaseColumns._ID, ToursDBOpenHelper.COLUMN_ID + " AS " + BaseColumns._ID); 
     columnMap.put(SearchManager.SUGGEST_COLUMN_TEXT_1, ToursDBOpenHelper.COLUMN_TITLE + " AS " + SearchManager.SUGGEST_COLUMN_TEXT_1); 
     columnMap.put(SearchManager.SUGGEST_COLUMN_INTENT_DATA, ToursDBOpenHelper.COLUMN_ID + " AS " + SearchManager.SUGGEST_COLUMN_INTENT_DATA); 
     builder.setProjectionMap(columnMap); 

     dbhelper = new ToursDBOpenHelper(getContext()); 
     //database = dbhelper.getReadableDatabase(); 

     SQLiteDatabase db = dbhelper.getWritableDatabase(); 
     cursor = builder.query(db, projection, selection, selectionArgs, null, null, null, null); 

     return cursor; 
} 

而且searchable.xml:

<?xml version="1.0" encoding="utf-8"?> 
<searchable xmlns:android="http://schemas.android.com/apk/res/android" 
    android:hint="@string/search_hint" 
    android:label="@string/app_name" 
    android:searchSuggestAuthority="com.exploreca.tourfinder.SearchContentProvider" 
    android:searchSuggestIntentAction="android.intent.action.VIEW" 
    android:searchSuggestSelection="city LIKE ?" 
    android:searchSuggestThreshold="2" 
    android:includeInGlobalSearch="true"/> 

回答

2

我已經想通了,感謝這個post。對於輸入第一個或第二個單詞後出現的建議,我們需要「通配符」:

"city LIKE '%' || ? || '%'"