Je ne parviens pas à faire fonctionner l’interface de recherche Android dans la barre d’actions.

J’ai essayé de suivre le guide ici , mais j’ai des problèmes. L’icône de recherche apparaît correctement dans la barre d’action, mais je ne parviens pas à associer la searchable configuration faire l’object d’une searchable configuration à SearchView.

Mon fichier res / menu / options_menu.xml:

     

Mon fichier res / xml / searchable.xml (Remarque: je devais créer un dossier “xml” dans le dossier res car il n’existait pas. Je ne pense pas que cela devrait faire une différence?

   

Mon fichier res / values ​​/ ssortingngs.xml:

   Starting To Feel It Single Post View Search Activity Settings Last Next Play Previous Next Playlist Progress Bar Open navigation drawer Close navigation drawer Search STFI Search STFI Menu Item Picture  

Mon fichier AndroidManifest.xml:

                      

Toutes mes activités étendent une classe que j’ai appelée MenuActivity et voici la fonction onCreateOptionsMenu définie dans MenuActivity.java:

 @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.options_menu, menu); // Associate searchable configuration with the SearchView SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); SearchView searchView = (SearchView) menu.findItem(R.id.search).getActionView(); System.out.println("The component name is " + this.getComponentName().toSsortingng()); SearchableInfo info = searchManager.getSearchableInfo(getComponentName()); if(info == null) { System.out.println("It is null!"); } searchView.setSearchableInfo(info); return true; } 

Je reçois toujours cette information est nulle dans cette fonction. Je ne suis pas sûr que ce que je fais de mal pour obtenir des informations soit nul, et je ne sais pas comment le corriger. Je ne sais pas si vous en avez besoin ou non, mais ci-dessous se trouve ma classe SearchActivity. Pour le moment, il ne fait rien d’essayer d’afficher la recherche (toutefois, elle n’est jamais appelée car la configuration de la recherche n’est pas configurée correctement). Le fichier est enregistré dans com.stfi.activities.SearchActivity.java.

Autre remarque: lorsque The component name is ComponentInfo(com.stfi/com.stfi.StartingToFeelIt) le nom du composant dans la fonction ci-dessus, The component name is ComponentInfo(com.stfi/com.stfi.StartingToFeelIt) et pas seulement com.stfi.StartingToFeelIt. Cela me porte à croire que quelque chose ne va pas dans mon fichier AndroidManifest, mais je ne sais pas si c’est la cause de la raison pour laquelle je ne peux pas associer la configuration de recherche.

 public class SearchActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { handleIntent(getIntent()); } @Override protected void onNewIntent(Intent intent) { handleIntent(intent); } private void handleIntent(Intent intent) { if (Intent.ACTION_SEARCH.equals(intent.getAction())) { Ssortingng query = intent.getSsortingngExtra(SearchManager.QUERY); System.out.println("You are searchin " + query); } } } 

J’ai eu l’occasion de fouiller et j’ai trouvé deux choses à faire.

1. Mettez à jour votre fichier Manifest.xml et utilisez pour append votre interface de recherche.

2. Pour que la configuration soit consultable, vous devez append des métadonnées.

  ...   

probablement problème avec le manifeste, je suppose,

  

est manquant dans la balise d’activité de votre manifeste pour ‘StartingToFeelIt’

         

vous pouvez aussi utiliser ABS CollapsibleSearchMenu Lib.

“Mon fichier res / xml / searchable.xml (Remarque: je devais créer un dossier” xml “dans le dossier res car il n’existait pas. Je ne pense pas que cela devrait faire une différence??”

Vous pouvez append des dossiers selon vos besoins, tant que vous suivez les directives des espaces de noms des fichiers XML.

En ce qui concerne la recherche, je ne pense pas que minSdkVersion et targetSdkVersion aient raison.

Selon l’article d’ Android, l’article restant compatible en amont que vous devriez utiliser

   ... 
        

Dans mon menu XML pour l’activité:

    

Code Java:

 public class SearchActivity extends ListActivity { private static final int ICON = R.drawable.ic_ab_back_holo_light; private SearchDataBaseAdapter searchDataBaseAdapter; private ArrayList searchResultList; private ResultListAdapter resultListAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_search); super.onCreate(savedInstanceState); searchResultList = new ArrayList(); // gets the db reference from adapter searchDataBaseAdapter = new SearchDataBaseAdapter(this); searchDataBaseAdapter.open(); handleIntent(getIntent()); } /** * Handles the intent from the search. * * @param intent */ private void handleIntent(Intent intent) { if (Intent.ACTION_SEARCH.equals(intent.getAction())) { // handles a search query Ssortingng query = intent.getSsortingngExtra(SearchManager.QUERY); search(query); } } @Override public void onNewIntent(Intent intent) { // super.onNewIntent(intent); setIntent(intent); handleIntent(intent); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.search: onSearchRequested(); break; } return true; } /** * Search function. * * @param searchTerm */ public void search(Ssortingng searchTerm) { try { Cursor cursor = searchDataBaseAdapter.getWordMatches(searchTerm, null); //create and add your list to your adapter. resultListAdapter = new ResultListAdapter(this, itemsFound(cursor, cursor.getSsortingng(cursor.getColumnIndex("YOUR_COLUMN")))); } catch (NullPointerException ex) { Toast.makeText(this, "Search Term not found", Toast.LENGTH_LONG).show(); ex.getStackTrace(); } setListAdapter(resultListAdapter); } /** * Returns the items found and writes the items found to an arraylist. * @return */ private ArrayList itemsFound(Cursor cursor, Ssortingng itemName, Ssortingng itemDescription, int type) { // ArrayList list = new ArrayList(); if (cursor.moveToFirst()) { do { searchResultList.add(new SearchResultModel(itemName, itemDescription, type, ICON)); } while (cursor.moveToNext()); } cursor.close(); return searchResultList; } } 

J’espère que cela t’aides