2017-08-20 1 views
1

J'utilise SearchView dans mon avec Custom List. Il affiche un mauvais résultat, c'est-à-dire le même résultat à chaque fois (premier élément de la liste). Donc, j'essaie d'utiliser Gauva Filter de Google et ça fonctionne très bien quand je connecte le résultat après le filtre. Mais maintenant je ne sais pas comment l'intégrer avec ma listview.Puis-je implémenter Google Search Guava dans SearchView

voici mon code de CustomList.java package com.jarvis.easysplay.adapter;

public class CustomList extends ArrayAdapter implements Filterable{ 
    private String[] names; 
    private String[] desc; 
    private Integer[] imageid; 
    private Activity context; 

    public CustomList(Activity context, String[] names, String[] desc) { 
     super(context, R.layout.list_item, names); 
     this.context = context; 
     this.names = names; 
     this.desc = desc; 
//  this.imageid = imageid; 

    } 

    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     LayoutInflater inflater = context.getLayoutInflater(); 
     View listViewItem = inflater.inflate(R.layout.song_list_layout, null, true); 
     TextView textViewName = (TextView) listViewItem.findViewById(R.id.song_title); 
     TextView textViewDesc = (TextView) listViewItem.findViewById(R.id.song_author); 
     ImageView image = (ImageView) listViewItem.findViewById(R.id.imageView); 
//  TextView options = (TextView) listViewItem.findViewById(R.id.options); 

     //Set Data 
     textViewName.setText(names[position]); 
     textViewDesc.setText(desc[position]); 
     return listViewItem; 
    } 

    @NonNull 
    @Override 
    public Filter getFilter() { 
     return super.getFilter(); 
    } 

} 

Et voici mon code de recherche de filtre: -

public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
     inflater.inflate(R.menu.music_search, menu); 
     MenuItem searchItem = menu.findItem(R.id.music_search_bar); 
     SearchView searchView = (SearchView) searchItem.getActionView(); 
     searchView.setQueryHint("Search Song"); 
     searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 

      @Override 
      public boolean onQueryTextSubmit(String query) { 
       return true; 
      } 

      @Override 
      public boolean onQueryTextChange(String newText) { 
//    SongFragment.this.customList.getFilter().filter(newText); //I used this but it is not working 
       List<String> list = new ArrayList<>(); 
       list.addAll(arrayList); 
       List<String> filteredList = Lists.newArrayList(Collections2.filter(
         list, Predicates.contains(Pattern.compile(newText,Pattern.CASE_INSENSITIVE)))); 
       String[] stringArray = filteredList.toArray(new String[0]); 
       CustomList custom = new CustomList(getActivity(),stringArray,stringArray); 
       custom.getFilter().filter(newText); 

       Log.d("searchResult",filteredList.toString()); 
       return false; 

      } 
     }); 

     super.onCreateOptionsMenu(menu, inflater); 
    } 

Quelqu'un peut-il me dire comment puis-je utiliser goyave de Google dans mon code ou comment obtenir correcte du résultat en utilisant sans utiliser goyave de Google filtre. J'ai fait tellement google et aussi essayer beaucoup de solutions mais cela n'a pas fonctionné :(.

Répondre

0

Vous créez un nouvel adaptateur CustomList, mais vous ne faites rien avec lui. Si vous utilisez un ListView, vous pouvez appeler le ListView.setAdapter(custom).Vous n'avez probablement pas besoin de mélanger et de filtrer les fichiers en utilisant Filterable et de les filtrer par Goyave

+0

m obtenir la position 1 de l'élément résultant Je veux la position réelle de cet élément comme dans la vue de liste précédente Est-il possible de faire cela? –