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

时间:2018-03-26 12:47:36

标签: android searchview

我想使用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>

在我的活动中,我有以下内容:

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方法中获得结果但没有显示任何内容。在这种情况下,我无法使用菜单栏。

1 个答案:

答案 0 :(得分:0)

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

http://abhiandroid.com/ui/searchview

这是您需要根据请求处理列表视图的可见性的最后一个示例。