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