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的可见性即可。
我想使用 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的可见性即可。