我可以在SearchView中实现Google Guava搜索吗?

时间:2017-08-20 18:13:46

标签: android guava searchview

我在自定义列表中使用了SearchView。它显示错误的结果,即每次都有相同的结果(列表的第一项)。 所以,我尝试使用谷歌的Gauva过滤器,当我在过滤后记录结果时效果很好。但现在我不知道如何将它与我的列表视图集成。

这是我的CustomList.java代码 包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();
    }

}

这是我的搜索过滤器代码: -

   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);
    }

有人可以告诉我如何在我的代码中使用Google的Guava或如何在不使用google的Guava过滤器的情况下使用正确的结果。 我做了很多谷歌,并尝试了许多解决方案,但它没有用:(。

1 个答案:

答案 0 :(得分:0)

您正在创建新的CustomList适配器,但您无法使用它做任何事情。您需要在ListView或您正在使用的任何AdapterView中安装新适配器。如果您使用的是ListView,则可以致电ListView.setAdapter(custom)。您可能不需要使用Filterable混合和匹配过滤并使用Guava过滤。