http://stackoverflow.com/a/30556508
http://stackoverflow.com/a/18714611
http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/1120/2025.html
今天想要在不同的fragment使用特定的menu item,但有些menu item是可以共用。
1.建立一個通用menu.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" tools:context=".MainActivity"> <group android:id="@+id/main_menu_group"> <item android:id="@+id/action_refresh" android:icon="@drawable/ic_refresh" android:orderInCategory="90" android:title="@string/action_refresh" app:showAsAction="ifRoom"/> <item android:id="@+id/action_settings" android:orderInCategory="100" android:title="@string/action_settings" app:showAsAction="never"/> </group> </menu>
先把需要通用的menu item寫在<group>外,至於範例是想製造每個fragment呈現不同的menu item。
2.建立特定的menu - menu_f1.xml
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <item android:id="@+id/action_search" android:icon="@drawable/ic_search" android:imeOptions="actionSearch" android:inputType="textCapWords" android:orderInCategory="80" android:title="search" app:actionViewClass="android.support.v7.widget.SearchView" app:showAsAction="ifRoom|collapseActionView"/> </menu>
3.在需要擁有特定menu item的fragment的onCreateView
增加setHasOptionsMenu(true);
來告知這個fragment有另外的OptionsMenu(參考)
4.建立onCreateOptionsMenu(Menu menu, MenuInflater inflater) method,並在onCreateOptionsMenu 引用(inflate)特定的menu,並把通用的menu item顯示設為false。如下所示:
@Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { // Inflate the menu; this adds items to the action bar if it is present. inflater.inflate(R.menu.menu_air, menu); menu.setGroupVisible(R.id.main_menu_group, false); // menu.findItem(R.id.action_settings).setVisible(false); // menu.findItem(R.id.action_refresh).setVisible(false); super.onCreateOptionsMenu(menu, inflater); }
- 透過1.設定group的方式,將group內的menu item設為不顯示。
- 或者是用menu.findItem(R....).setVisible(false);將個別menu item設為不顯示。
@Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { // Inflate the menu; this adds items to the action bar if it is present. inflater.inflate(R.menu.menu_air, menu); menu.setGroupVisible(R.id.main_menu_group, false); // menu.findItem(R.id.action_settings).setVisible(false); // menu.findItem(R.id.action_refresh).setVisible(false); SearchManager searchManager = (SearchManager) getActivity().getSystemService(Context.SEARCH_SERVICE); final SearchView searchView = (SearchView) MenuItemCompat.getActionView(menu.findItem(R.id.action_search)); searchView.setSearchableInfo(searchManager.getSearchableInfo(getActivity().getComponentName())); searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { @Override public boolean onQueryTextSubmit(String s) { return false; } @Override public boolean onQueryTextChange(String s) { mAdapter.setSearchPattern(s); return true; } }); super.onCreateOptionsMenu(menu, inflater); }end...
沒有留言:
張貼留言