2013-04-08 1 views
2

У меня есть диалоговое окно поиска, которое должно быть предложено из базы данных, как показано здесь http://developer.android.com/images/search/search-suggest-custom.png.Android - диалог поиска с пользовательскими предложениями

Диалоговое окно поиска будет показано вверху, когда я нажму элемент меню панели действий. Когда пользователь начинает вводить текст, он должен искать соответствующий db и отображать предложения соответствующим образом. На данный момент у меня есть диалог поиска, но когда пользователь вводит текст, никаких предложений не отображается.

мой поставщик контента:

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> 

любая идея, где я буду неправильно?

+0

Что ошибка вы получаете? –

+0

@HarshaMV Я ​​не получаю никакой ошибки, когда я набираю что-то в диалоговом окне поиска, нет показанного sugesstion –

ответ

1

Try удалить пространство в строке android:searchSuggestSelection=" ?" >

в android:searchSuggestSelection="?" >

3

Проблема в вопросительный знак android:searchSuggestSelection=" ?" >. Когда вы набрали «что-то» в представлении поиска, оно передаст «что-то», с пространством слева. Таким образом, решение состоит в том, чтобы удалить пространство, но '?' является особым символом в файлах Android XML, а это значит, что вам нужно его избежать.

Так что окончательное решение android:searchSuggestSelection="\?" >

Смежные вопросы