[英]Android ActionBar with searchView
首先,您需要為您的適配器實現Filterable 。 然后將搜索字段添加到操作欄菜單。
<item android:id="@+id/menu_search" android:icon="@android:drawable/ic_menu_search" app:showAsAction="always" app:actionViewClass="android.support.v7.widget.SearchView" android:title="Search"/>
之后,在您的活動中執行以下操作。
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
MenuItem searchMenuItem = menu.findItem(R.id.menu_search);
if (searchMenuItem == null) {
return;
}
searchView = (SearchView) searchMenuItem.getActionView();
if (searchView != null) {
searchView.setQueryHint(getString(R.string.search_hint));
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String s) {
return false;
}
@Override
public boolean onQueryTextChange(String s) {
SearchFragment.this.onQueryTextChange(s);
return false;
}
});
}
}
接着
void onQueryTextChange(String query) { searchAdapter.getFilter().filter(query); }
要大致使用android中的工具欄實現基本的searchView,您需要對customListVolley項目進行以下修改:
1. 將工具欄添加到您的activity_main.xml
例如 :
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
<android.support.v7.widget.Toolbar
android:visibility="visible"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/toolbar"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#1111DD"
app:theme="@style/ToolbarTheme"/>
<ListView
android:id="@+id/list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:divider="@color/list_divider"
android:dividerHeight="1dp"
android:listSelector="@drawable/list_row_selector" />
</LinearLayout>
2. 創建search_toolbar.xml並將其添加到菜單文件夾下
像這樣:
<menu
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" >
<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"
/>
</menu>
3. 使您的CustomListAdapter.java實現可過濾
例如:
public class CustomListAdapter
extends BaseAdapter
implements Filterable
{
private Activity activity;
private LayoutInflater inflater;
private List<Movie> movieItems;
private List<Movie> originalList; //<--
//-->
private ItemFilter mFilter = new ItemFilter();
@Override
public Filter getFilter() {
return mFilter;
}
//<--
ImageLoader imageLoader = AppController.getInstance().getImageLoader();
public CustomListAdapter(Activity activity, List<Movie> movieItems) {
this.activity = activity;
this.movieItems = movieItems;
originalList = movieItems; //<--
}
.
.
.
//-->Implement your filter logic
private class ItemFilter extends Filter {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
String filterString = constraint.toString().toLowerCase();
FilterResults results = new FilterResults();
List<Movie> movies = new ArrayList<>();
for(Movie item : originalList)
{
if(item.getTitle().toLowerCase().contains(filterString))
movies.add(item);
}
movieItems = movies;
results.count = movies.size();
return null;
}
@SuppressWarnings("unchecked")
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
notifyDataSetChanged();
}
}//<--
}
4. 在您的主要活動中初始化工具欄和searchView
像這樣:
public class MainActivity extends AppCompatActivity {
// Log tag
private static final String TAG = MainActivity.class.getSimpleName();
// Movies json url
private static final String url = "http://api.androidhive.info/json/movies.json";
private ProgressDialog pDialog;
private List<Movie> movieList = new ArrayList<Movie>();
private ListView listView;
private CustomListAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//-->Setup your toolbar
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
.
.
.
}
.
.
.
//--->Setup your searchView
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.search_toolbar, menu);
MenuItem searchItem = menu.findItem(R.id.action_search);
SearchView.OnQueryTextListener textChangeListener = new SearchView.OnQueryTextListener()
{
@Override
public boolean onQueryTextChange(String newText)
{
// this is your adapter that will be filtered
adapter.getFilter().filter(newText);
return true;
}
@Override
public boolean onQueryTextSubmit(String query)
{
// this is your adapter that will be filtered
adapter.getFilter().filter(query);
return true;
}
};
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView searchView = null;
if (searchItem != null) {
searchView = (SearchView) searchItem.getActionView();
}
if (searchView != null) {
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
searchView.setIconifiedByDefault(false);
searchView.setOnQueryTextListener(textChangeListener);
}
return super.onCreateOptionsMenu(menu);
// return true;
}
}
這應該允許您實現基本的searchView。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.