Bonjour,

J'ai créé une SearchView dans une ActionBar en suivant ce tuto. La recherche fonctionne bien sauf qu'il faut écrire minimum 2 lettres pour que les résultats s'affichent. Dans le fichier searchable.xml, j'ai introduit cette ligne : android:searchSuggestThreshold="1", et là, ca marchait dès la 1ere lettre, puis disparaissait avec la 2e, pour réapparaitre à la 3e. Pour que les résultats s'affichent avec seulement 2 lettres, il faut ajouter un espace puis l'effacer.

Je ne comprends pas ce qu'il se passe. Pourriez vous éclairer mes lanternes, voire me donner une solution valable ?

D'avance merci.



Pour info, voici le code de l'activité gérant la searchview.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
private List<String> items;
 
private Menu menu;
 
@Override
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public boolean onCreateOptionsMenu(Menu menu) {
 
    getMenuInflater().inflate(R.menu.example, menu);
    this.menu = menu;
 
    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
 
        SearchManager manager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
        SearchView search = (SearchView) menu.findItem(R.id.search).getActionView();
        search.setSearchableInfo(manager.getSearchableInfo(getComponentName()));
        search.setOnQueryTextListener(new OnQueryTextListener() { 
 
            @Override 
            public boolean onQueryTextChange(String query) {
                 loadData(query);
                 return true; 
             } 
         });
     }
     return true;
 }
 
// History
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
private void loadData(String query) {
 
    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
 
        // Load data from list to cursor
        String[] columns = new String[] { "_id", "text" };
        Object[] temp = new Object[] { 0, "default" };
 
        MatrixCursor cursor = new MatrixCursor(columns);
 
        for(int i = 0; i < items.size(); i++) {
 
            temp[0] = i;
            temp[1] = items.get(i);
 
            cursor.addRow(temp);
 
        }
 
        // Alternatively load data from database
        //Cursor cursor = db.rawQuery("SELECT * FROM items", null);
 
        SearchManager manager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
        final SearchView search = (SearchView) menu.findItem(R.id.search).getActionView(); 
        search.setSearchableInfo(manager.getSearchableInfo(getComponentName()));
        search.setSuggestionsAdapter(new ExampleAdapter(this, cursor, items));
     }
 }