invalidateOptionsMenu();使原填充的菜单项无效,当用户再次访问菜单时,再次调用onCreateOptionsMenu(Menu menu)。如果我们要每次访问都重新对菜单进行处理,使用onPrepareOptionsMenu()来替代onCreateOptionsMenu()
菜单文件和SearchView:搜索框 的使用
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.actions,menu);
SearchView searchView = (SearchView) menu.findItem(R.id.app_bar_search).getActionView();
searchView.setOnQueryTextListener(new QueryTextListener());
return true;
}
public class QueryTextListener implements SearchView.OnQueryTextListener{
@Override
public boolean onQueryTextSubmit(String query) {
Toast.makeText(ActionBarUseageActivity.this, "Searching for: " + query + "...", Toast.LENGTH_SHORT).show();
return true;
}
@Override
public boolean onQueryTextChange(String newText) {
newText = newText.isEmpty() ? "" : "Query so far: " + newText;
tvSearchPre.setText(newText);
return true;
}
}
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/app_bar_search"
app:actionViewClass="android.support.v7.widget.SearchView"
android:icon="@drawable/ic_search_black_24dp"
android:title="Search"
app:showAsAction="ifRoom"/>
<item
android:id="@+id/app_bar_edit"
android:icon="@android:drawable/ic_menu_edit"
android:title="Edit"
app:showAsAction="always"/>
<item
android:id="@+id/app_bar_sort"
android:icon="@android:drawable/ic_menu_sort_by_size"
android:title="Sort"
app:showAsAction="ifRoom">
<menu>
<item
android:id="@+id/action_sort_size"
android:icon="@android:drawable/ic_menu_sort_by_size"
android:title="By Size"/>
<item
android:id="@+id/action_sort_alpha"
android:icon="@android:drawable/ic_menu_sort_alphabetically"
android:title="Alphabetically"/>
</menu>
</item>
</menu>
另外的用法
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
//将搜索框加入ActionBar
MenuItem item = menu.add("Search");
//设置SearchView的图标
item.setIcon(android.R.drawable.ic_menu_search);
//设置ActionItem的显示方式
item.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM|MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);
//使用自定义的SearchView以便更好的控制
mSearchView = new MySearchView(getActivity());
//设置文本改变的监听器
mSearchView.setOnQueryTextListener(this);
//设置可删除文本的监听器
mSearchView.setOnCloseListener(this);
//设置图标是否显示在文本的旁边,还是作为背景
mSearchView.setIconifiedByDefault(true);
//将SearchView作为ActionItem的选项
item.setActionView(mSearchView);
}