android.support.v7.widget.SearchView 不显示结果

android.support.v7.widget.SearchView doesn't display results

我想使用 android.support.v7.widget.SearchView 但要在布局中。我正在使用 Filter 并在 publishResults 中获取数据,但未显示。这是我的 xml:

 <LinearLayout
            android:id="@+id/contactPickerContainer"
            android:layout_width="match_parent"
            android:layout_height="80dp"
            android:clipChildren="false"
            android:clipToPadding="false"
            android:layout_gravity="top"
            android:layout_margin="0dp"
            android:background="@drawable/border_background"
            android:gravity="center_vertical"
            android:orientation="horizontal"
            >

            <android.support.v7.widget.SearchView
            android:id="@+id/addressSearchView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"

            android:hint="@string/enter_recipients"
            android:padding="10dp"
            android:textColor="#444444"/>
       <ImageView
                android:layout_width="45dp"
                android:layout_height="45dp"
                android:padding="10dp"
                android:src="@drawable/contact_icon"
            />

        </LinearLayout>

在我的 activity 中,我有以下内容:

addressSearchView = (SearchView) findViewById(R.id.addressSearchView);
doSearch(addressSearchView);
private final void doSearch(final SearchView searchView) {

    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {

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

        @Override
        public boolean onQueryTextChange(final String newText) {
            getAdapter().getFilter().filter(newText);
            return true;
        }
    });
}

并且在过滤器中:

@Override
public final Filter getFilter() {
    return new Filter() {
        @Override
        protected FilterResults performFiltering(CharSequence charSequence){
            getContactList();
            final String charString = charSequence.toString();
            if (charString.isEmpty()) {
                filteredContacts = contacts;
            } else {
                final List<ContactModel> filteredList = new ArrayList<>();
                for (final ContactModel contactModel : contacts) {
                    if 
    (contactModel.getName().toLowerCase().contains(charString)) {
                        filteredList.add(contactModel);
                    }
                }
                filteredContacts = filteredList;
            }
            final FilterResults filterResults = new FilterResults();
            filterResults.values = filteredContacts;
            return filterResults;
        }

        @Override
        protected void publishResults(CharSequence constraint, FilterResults 
    results) {
            filteredContacts = (List<ContactModel>) results.values;
            notifyDataSetChanged();

        }
    };
}

我正在 publishResults 方法中获取结果,但没有显示任何内容。在这种情况下我无法使用菜单栏。

由于我是 android 的新手,我什至不知道 searchview 组件仅用于搜索。结果的显示假定在 ListView 中(至少在我的场景中)并创建一个 ListViewAdapter。对我和其他人有帮助的是:

http://abhiandroid.com/ui/searchview

最后一个例子,你只需要根据请求处理listview的可见性即可。