Conversion d'un ArrayAdapter en CursorAdapter pour une utilisation dans une recherche

Comment puis-je convertir un ArrayAdapter<String> de données statiques en CursorAdapter pour utiliser Suggestion Listener dans SearchView ? J'ai construit ArrayAdapter<String> partir de données statiques ( allString )

 ArrayAdapter<String> searchAdapter = new ArrayAdapter<String>(context, R.layout.listitem, allString); 

Et je l'utilise pour un MultiAutoCompleteTextView qui fonctionne bien dans des périphériques avec un niveau API inférieur à 11

  • Le libellé de la liste Html ne fonctionne pas dans la vue de texte Android. Que puis-je faire?
  • Pourquoi mon spinner Android affiche-t-il le bouton radio dans la visualisation de texte?
  • Android: comment rendre les fichiers d'actifs de jeux lisibles à partir du code c ++ à l'aide de ndk
  • Supprimez l'icône de notification de la barre d'état
  • Directions API sur Android
  • Glide ne peut pas charger le fichier depuis le stockage interne
  •  MultiAutoCompleteTextView findTextView.setAdapter(searchAdapter); 

    Cependant, mon API cible est de niveau 11 et pour API> 10, j'utilise un ActionBar dans lequel j'aimerais avoir une SearchView à la place.

    Voici ce que j'ai essayé: il montre le ActionBar avec la recherche intégrée mais ne donne aucune suggestion comme dans le MultiAutoCompleteTextView .

     @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); if (android.os.Build.VERSION.SDK_INT > 10){ inflater.inflate(R.menu.menu11, menu); searchView = (SearchView) menu.findItem(R.id.MENU_SEARCH).getActionView(); int[] to = {0}; CursorAdapter cursorAdapter = new SimpleCursorAdapter(context, R.layout.listitem, null, allBusStopString, to); searchView.setSuggestionsAdapter(cursorAdapter); searchView.setOnSuggestionListener(new OnSuggestionListener() { @Override public boolean onSuggestionClick(int position) { String selectedItem = (String)cursorAdapter.getItem(position); Log.v("search view", selectedItem); return false; } @Override public boolean onSuggestionSelect(int position) { return false; } }); }else{ inflater.inflate(R.menu.menu, menu); } return true; } 

  • À quel point je devrais être prudent lorsque je crée des méthodes / activités qui interagissent avec la base de données SQLite?
  • Appeler startActivity () de l'extérieur d'une activité?
  • Comment faire pivoter l'écran vers le paysage (ou le portrait) de manière programmable?
  • Comment servir un fichier sur sdcard à l'aide de NanoHTTPD (à l'intérieur d'Android)
  • Ajout d'une base de données / backend aux applications Android
  • Fab.show () n'est pas animé la première fois après l'initialisation d'une nouvelle activité
  • 2 Solutions collect form web for “Conversion d'un ArrayAdapter en CursorAdapter pour une utilisation dans une recherche”

    C'est étrange SearchView.setSuggestionsAdapter accepte CursorAdapter uniquement.

    Vous pouvez créer MatrixCursor et le remplir avec les données de String array. J'espère que vous avez une petite collecte de données.

    Passez ensuite le curseur à CursorAdapter.

      String[] columnNames = {"_id","text"} MatrixCursor cursor = new MatrixCursor(columnNames); String[] array = getResources().getStringArray(R.array.allStrings); //if strings are in resources String[] temp = new String[2]; int id = 0; for(String item : array){ temp[0] = Integer.toString(id++); temp[1] = item; cursor.addRow(temp); } String[] from = {"text"}; int[] to = {R.id.name_entry}; busStopCursorAdapter = new SimpleCursorAdapter(context, R.layout.listentry, cursor, from, to); 

    J'étais confronté à un problème similaire. Vous pouvez utiliser SearchView.setSuggestionsAdapter () qui n'accepte que CursorAdapter . D'autre part … quel est le but? Si vous utilisez la norme <android.support.v7.widget.SearchView /> elle contient FindAutoComplete qui étend AppCompatAutoCompleteTextView à l'intérieur. Le code suivant m'a fonctionné:

     List<String> items = Lists.newArrayList(new String[] {"aaaaa", "bbbbb", "ccccc", "ddddd"}); SearchView searchView = (SearchView) findViewById(R.id.autocomplete_searchview); SearchView.SearchAutoComplete searchSrcTextView = (SearchView.SearchAutoComplete) findViewById(android.support.v7.appcompat.R.id.search_src_text); searchSrcTextView.setThreshold(1); searchSrcTextView.setAdapter(new SuggestionAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, items)); searchSrcTextView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { return; } }); 

    Et le code adaptateur suivant:

     public class SuggestionAdapter<T> extends ArrayAdapter<T> { private List<T> items; private List<T> filteredItems; private ArrayFilter mFilter; public SuggestionAdapter(Context context, @LayoutRes int resource, @NonNull List<T> objects) { super(context, resource, Lists.<T>newArrayList()); this.items = objects; } @Override public long getItemId(int position) { return position; } @Override public T getItem(int position) { return items.get(position); } @Override public Filter getFilter() { if (mFilter == null) { mFilter = new ArrayFilter(); } return mFilter; } public int getCount() { //todo: change to pattern-size return items.size(); } private class ArrayFilter extends Filter { @Override protected FilterResults performFiltering(CharSequence prefix) { FilterResults results = new FilterResults(); //custom-filtering of results results.values = items; results.count = items.size(); return results; } @Override protected void publishResults(CharSequence constraint, FilterResults results) { filteredItems = (List<T>) results.values; if (results.count > 0) { notifyDataSetChanged(); } else { notifyDataSetInvalidated(); } } } } 
    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.