2011-12-15 13 views
7

Estoy tratando de implementar un diálogo de búsqueda en una aplicación Android Mono por la documentación aquí: http://developer.android.com/guide/topics/search/search-dialog.htmlde diálogo de búsqueda en Mono Android

tengo una actividad que el usuario debe ser capaz de buscar a partir de:

[Activity (Label = "MyActivity", MainLauncher = true, Icon = "@drawable/icon", Theme = "@style/MyStyle")] 
[MetaData ("android.app.default_searchable", Value = ".SearchActivity")] 
public class MainActivity : BaseActivity {... 

tengo una actividad de búsqueda (donde el trabajo pesado va a pasar):

[Activity(Theme = "@style/MyStyle", Label = "Searchable", LaunchMode = Android.Content.PM.LaunchMode.SingleTop)] 
[IntentFilter(new[] { Intent.ActionMain }, Categories = new[] { Intent.CategoryLauncher, Intent.ActionSearch })] 
[MetaData("searchable", Resource = "@xml/searchable")] 
public class SearchActivity : BaseActivity { ... 

y tengo mi searchable.xml:

<?xml version="1.0" encoding="utf-8"?> 
<searchable 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:label="MyLabel" 
    android:hint="Search Products"> 
</searchable> 

Cuando presiono la tecla de búsqueda en el teléfono en MainActivity, no ocurre nada, no hay diálogo. Creo que mi problema radica en cómo se están traduciendo los atributos en el AndroidManifest.xml en tiempo de ejecución, pero no estoy seguro.

ACTUALIZACIÓN 1/3/2012: He publicado un proyecto destilado a los elementos más básicos aquí. Pulse el botón de búsqueda en tu Android y debería ver la SearchDialog pero no aparece: Demo Project Here

Respuesta

4

El problema está en el atributo [MetaData] en MainActivity. Si usted proporciona la versión correcta de espacio de nombres de la clase el diálogo de búsqueda aparece correctamente:

[MetaData ("android.app.default_searchable", Value = "searchdialogtest.SearchActivity")] 
public class MainActivity : BaseActivity { 
+0

Lo siento, esperé tanto para aceptar la respuesta. Esta solución funcionó pero faltaba algo de información. En primer lugar, Google Docs implica que el prefijo de su nombre de actividad con un "." lo calificará completamente, lo que aparentemente es incorrecto. En segundo lugar, el espacio de nombres debe estar en minúsculas. Ya había intentado calificar completamente el nombre de la clase, pero no funcionó porque mi espacio de nombres tenía caracteres en mayúscula. No entiendo por qué este sería el caso. – dubj

+0

Java requiere que los espacios de nombres se escriban en minúscula, por lo que Mono para Android lo traduce detrás de escena. En este caso, debe usar el nombre de clase completamente calificado de Java. Puede personalizar el espacio de nombres que se usará en las propiedades del proyecto, y siempre puede verificar el archivo AndroidManifest.xml generado durante el empaquetado en la carpeta obj/Debug/android para ver qué se está generando. –

+0

No sabía eso sobre los espacios de nombres de Java o cómo encontrar el archivo de manifiesto generado. El que traté de mirar (empaquetado en la apk) estaba en formato binario. Esto fue muy útil, gracias! – dubj

0

que siento en el archivo de manifiesto, la etiqueta meta-datos searachable no es adecuada (android: name = "android.app.searchable ")

Muestra Manifiesto - MainActivity Tag -

<activity android:name=".MainActivity"> <meta-data android:name="android.app.default_searchable" android:value="pckname.SearchClass"/> </activity>

S etiqueta earchActivity -

<activity android:name=".SearchActivity" > 
<intent-filter> 
    <action android:name="android.intent.action.SEARCH" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
    </intent-filter> 
    <meta-data 
    android:name="android.app.searchable" 
    android:resource="@xml/searchable" /></activity> 
1

en su serachable.xml no se puede tener una constante de cadena como un nombre y una pista ... que debe vincularse dinámicamente @string/my_app_name@string/my_hint

y bien todo de trabajo!

Cuestiones relacionadas