2012-06-04 11 views
5

Tengo una función de búsqueda en mi proyecto. En searchable.xml, me gustaría limitar la búsqueda solo cuando el usuario escriba al menos 3 caracteres.Android: parámetro saerchable.xml y searchSuggestThreshold

Esto se puede hacer con android: searchSuggestThreshold = "3" pero en mi caso, no ocurre nada, el usuario puede realizar una búsqueda cuando escribe en o más caracteres.

Aquí es mi searchable.xml:

<searchable xmlns:android="http://schemas.android.com/apk/res/android" 
    android:label="@string/Label" 
    android:hint="@string/Hint" 
    android:searchSuggestThreshold="3" 
    android:includeInGlobalSearch="true"/> 

Aquí está el 2 activityes de búsqueda del Manifiesto

<activity android:name=".Search" 
     android:configChanges="orientation|keyboardHidden"> 
      <intent-filter> 
     <action android:name="android.intent.action.SEARCH" /> 
     </intent-filter> 
     <meta-data android:name="android.app.searchable" 
       android:resource="@xml/searchable"/> 
     </activity> 

     <activity android:name=".SearchInterface" 
     android:configChanges="orientation|keyboardHidden"> 
     <meta-data android:name="android.app.default_searchable" 
       android:value=".Search" /> 
     </activity> 

Respuesta

5

Antes de responder a su pregunta hay una cosa que tiene que cambiar en el AndroidManifest.

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

tienen que estar entre <application></application> etiquetas pero no dentro de los <activity></activity>. Porque declara la actividad predeterminada para llamar cuando se activa un intento de búsqueda. Después de eso, prueba si android: searchSuggestThreshold ahora funciona. Lo que puede hacer como solución alternativa en el SearchHelper que está utilizando (la clase que administra las consultas SQL), recibe la entrada de búsqueda del usuario como parámetro para que pueda poner un simple if. De esta manera:

public static Cursor getAutoCompleteCursor(String s) { 
    Cursor cursor; 
    if (s != null && s.length() > 2) 
     cursor = searchAutoComplete(s); 
    else 
     cursor = null; 
    return cursor; 
} 

Espero que entiendas lo que quiero decir. ¡Cualquier duda solo házmelo saber!

+0

Hola @rallat, gracias por tu respuesta. Intenté la primera solución y nada cambió. Si echa un vistazo a este artículo: http://developer.android.com/guide/topics/search/search-dialog.html los metadatos están en la etiqueta de actividad y no en la etiqueta de la aplicación. –

+0

para la segunda solución, creo que esto no es posible porque cuando el usuario escribe el botón de búsqueda, la actividad de búsqueda se cierra y se abre una nueva donde estoy haciendo todos los querryes y visualizo los resultados. Entonces, necesito verificar la longitud de entrada cuando el usuario hace clic en el botón de búsqueda –

+0

al escribir los metadatos entre las etiquetas de la aplicación significa que la actividad de búsqueda puede invocar la búsqueda desde toda la aplicación. http://developer.android.com/resources/samples/SearchableDictionary/index.html – rallat

Cuestiones relacionadas