クラスBaseFragmentがあります。プライベートメニューを作成し、そのメニューをから設定しました
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.main, menu);
this.menu = menu;
}
main.xml には次のものがあります。
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<!-- Search / will display always -->
<item android:id="@+id/action_search"
android:icon="@drawable/ic_action_search"
android:title="@string/action_search"
android:showAsAction="ifRoom"/>
<!-- Refresh -->
<item android:id="@+id/action_refresh"
android:icon="@drawable/ic_action_refresh"
android:title="@string/action_refresh"
android:showAsAction="ifRoom" />
<!-- Download -->
<item android:id="@+id/action_download"
android:icon="@drawable/ic_action_download"
android:title="@string/action_download"
android:showAsAction="never"/>
<!-- Favorite -->
<item android:id="@+id/action_favorites"
android:icon="@drawable/ic_action_favorites"
android:title="@string/action_favorites"
android:showAsAction="never" />
</menu>
FragmentAとFragmentBがそのBaseFragmentに拡張する別のフラグメントがあります。FragmentAではすべてのメニューを表示し、アプリの実行時にすべて問題ありませんが、FragmentBではダウンロードとお気に入りの検索と更新を表示したいと考えています。
menuitem の可視性を操作するために base でメソッドを作成しようとしましたが、メニューは常に null を返します。
protected void setSearchable(boolean isSearchable){
menu.findItem(R.id.action_search).setVisible(isSearchable);
}
protected void setHasRefreshFuction(boolean isHasRefreshFunction){
menu.findItem(R.id.action_refresh).setVisible(isHasRefreshFunction);
}
protected void setDownloadable(boolean isDownloadable){
menu.findItem(R.id.action_download).setVisible(isDownloadable);
}
protected void setFavorite(boolean isFavorite){
menu.findItem(R.id.action_favorites).setVisible(isFavorite);
}
FragmentB の onCreate() でそのメソッドを次のように呼び出します。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setDownloadable(true);
setFavorite(true);
setHasRefreshFuction(false);
setSearchable(false);
}
誰か助けてください....私は多くのチュートリアルを読みましたが、これを行うための答えが見つかりません。注:私は setHasOptionsMenu(true); でした。BaseFragment の oncreate で