Android 如何在actionbar中添加searchview和从listview进行搜索
我实现了listview,现在我想在列表视图上实现搜索功能 这是我的密码Android 如何在actionbar中添加searchview和从listview进行搜索,android,searchview,Android,Searchview,我实现了listview,现在我想在列表视图上实现搜索功能 这是我的密码 @Override public boolean onQueryTextSubmit(String query) { return false; } @Override public boolean onQueryTextChange(String newText) { return true; } 如何在列表视图上实现搜索。我不知道在搜索和更新列表后如何实现其他功能 @Override public
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
return true;
}
如何在列表视图上实现搜索。我不知道在搜索和更新列表后如何实现其他功能
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
// Inflate menu to add items to action bar if it is present.
inflater.inflate(R.menu.menu_product_detail, menu);
// Associate searchable configuration with the SearchView
SearchManager searchManager =
(SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView searchView =
(SearchView) menu.findItem(R.id.menu_search).getActionView();
searchView.setSearchableInfo(
searchManager.getSearchableInfo(getComponentName()));
searchView.getQuery();
Log.v("Abhijit", "" + searchManager.QUERY.toString());
searchView.setOnQueryTextListener(this);
return true;
}
如何在列表视图上实现搜索。我不知道如何在搜索和更新列表后实现其他功能使用以下代码:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
// Inflate menu to add items to action bar if it is present.
inflater.inflate(R.menu.menu_product_detail, menu);
// Associate searchable configuration with the SearchView
SearchManager searchManager =
(SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView searchView =
(SearchView) menu.findItem(R.id.menu_search).getActionView();
searchView.setSearchableInfo(
searchManager.getSearchableInfo(getComponentName()));
searchView.getQuery();
Log.v("Abhijit", "" + searchManager.QUERY.toString());
searchView.setOnQueryTextListener(this);
return true;
}
<item
android:id="@+id/action_search"
android:icon="@android:drawable/ic_menu_search"
app:showAsAction="always"
app:actionViewClass="android.support.v7.widget.SearchView"
android:title="Search"/>
清单文件:
<meta-data
android:name="android.app.default_searchable"
android:value="com.apkgetter.SearchResultsActivity" />
<activity
android:name="com.apkgetter.SearchResultsActivity"
android:label="@string/app_name"
android:launchMode="singleTop" >
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
</intent-filter>
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable" />
</activity>
可搜索的xml文件:
<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
android:hint="@string/search_hint"
android:label="@string/app_name" />
实现可筛选到您的listview适配器,以根据搜索到的数据筛选列表。这是您在适配器中筛选的方式:
public class FavouritesAdapter extends RecyclerView.Adapter<FavouritesAdapter.MyViewHolder> implements Filterable {
private ItemFilter mFilter = new ItemFilter();
private ArrayList<ProductDetail> listItems, filterList;
private Context context;
public class MyViewHolder extends RecyclerView.ViewHolder {
public TextView textView;
public MyViewHolder(View view) {
super(view);
textView = (TextView) view.findViewById(R.id.textView);
}
}
public FavouritesAdapter(Context context, List<ProductDetail> listItems) {
this.context = context;
this.listItems = listItems;
this.filterList = new ArrayList<ProductDetail>();
// we copy the original list to the filter list and use it for setting row values
this.filterList.addAll(this.listItems);
}
@Override
public FavouritesAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item_favourites, parent, false);
return new FavouritesAdapter.MyViewHolder(itemView);
}
@Override
public void onBindViewHolder(FavouritesAdapter.MyViewHolder holder, int position) {
holder.textView.setText(filterList.get(position));
}
// Clean all elements of the recycler
public void clear() {
filterList.clear();
notifyDataSetChanged();
}
// Add a list of items
public void addAll(List<ProductDetail> list) {
filterList.addAll(list);
notifyDataSetChanged();
}
@Override
public int getItemCount() {
return (null != filterList ? filterList.size() : 0);
}
@Override
public Filter getFilter() {
return mFilter;
}
private class ItemFilter extends Filter {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
final Calendar calendar = Calendar.getInstance();
String filterString = constraint.toString().toLowerCase();
FilterResults results = new FilterResults();
final List<ProductDetail> list = listItems;
int count = list.size();
final ArrayList<ProductDetail> nlist = new ArrayList<ProductDetail>(count);
String filterableString ;
for (int i = 0; i < count; i++) {
filterableString = list.get(i).getYourObject; // get Your Object against whom you want to compare the list
if (filterableString.toLowerCase().contains(filterString)) {
nlist.add(listItems.get(i));
}
}
results.values = nlist;
results.count = nlist.size();
return results;
}
@SuppressWarnings("unchecked")
@Override
protected void publishResults(CharSequence constraint, Filter.FilterResults results) {
filterList = (ArrayList<ProductDetail>) results.values;
notifyDataSetChanged();
}
}
}
这个链接可能对你有帮助我是android新手你能告诉我代码中的解决方案吗请我想添加过滤功能我使用了ArrayListString filterableString;对于(int i=0;i
adapter.getFilter().filter(searchedEditText.getText().toString());