Android show SearchView result ListView above ViewPager

后端 未结 1 1117
不知归路
不知归路 2020-12-20 10:42

Hi i want to search users in my app via SearchView widget. I want to show suggested users name in a ListView above a ViewPager of same

1条回答
  •  [愿得一人]
    2020-12-20 11:31

    If you want your ListView to show results in real time which user will suggest in searchView - use Filter in your Adapter.

    Add to adapter:

    ArrayList adapterDataList = new ArrayList();
    ArrayList mFilteredDataList = new ArrayList(listOR);
    Filter mFilter = new Filter() {
    @Override
    protected FilterResults performFiltering(CharSequence searchTerm) {
    Locale locale = Locale.getDefault();
    FilterResults results = new FilterResults();
    if ((searchTerm null) || (searchTerm.length() 0)) {
    ArrayList searchList = new ArrayList(adapterDataList);
    results.values = searchList;
    results.count = searchList.size();
    } else {
    final String searchTermString = searchTerm.toString().toLowerCase(locale);
    final String[] words = searchTermString.split(" ");
    final int wordCount = words.length;
    final ArrayList newValues = new ArrayList();
    
    for (final String value : adapterDataList) {
                        if (value == null) {
                            continue;
                        }
                        final String valueText = value.toLowerCase(locale);
    for (int k = 0; k < wordCount; k++) {
                            if (valueText.contains(words[k])) {
                                newValues.add(value);
                                break;
                            }
                        }
                    }
                    results.values = newValues;
                    results.count = newValues.size();
                }
                return results;
            }
    @Override
            protected void publishResults(CharSequence constraint, FilterResults results) {
                mFilteredDataList = (ArrayList<String>)results.values;
                notifyDataSetChanged();
            }
        };
    public Filter getFilter(){ return mFilter; }
    
    to SearchView's TextChangedListener:
    @Override
    public void afterTextChanged(Editable searchText) {
    mAdapter.getFilter().filter(searchText);
    }
    

    I think it should work fine.

    0 讨论(0)
提交回复
热议问题