代码之家  ›  专栏  ›  技术社区  ›  f.trajkovski

安卓支持v7.widget。SearchView不显示结果

  •  -1
  • f.trajkovski  · 技术社区  · 6 年前

    我想使用android。支持v7.widget。SearchView,但要在布局中。我正在使用过滤器,并在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 回复  |  直到 6 年前
        1
  •  0
  •   f.trajkovski    6 年前

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

    http://abhiandroid.com/ui/searchview

    这是最后一个示例,您只需要根据请求处理listview的可见性。