onCreateView
内にsetHasOptionsMenu(true)
を配置しましたが、フラグメント内でonCreateOptionsMenu
を呼び出すことはできません。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
setHasOptionsMenu(true);
return inflater.inflate(R.layout.facesheet, container, false);
}
以下は私のonCreateOptionsMenu
コードです。
@Override
public boolean onCreateOptionsMenu(com.actionbarsherlock.view.Menu menu) {
getSupportMenuInflater().inflate(R.menu.layout, menu);
return (super.onCreateOptionsMenu(menu));
}
私が得るエラーメッセージ:
タイプFragmentのメソッド
onCreateOptionsMenu(Menu)
は、スーパータイプメソッドをオーバーライドまたは実装する必要があります。
これを試して、
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.menu_sample, menu);
super.onCreateOptionsMenu(menu,inflater);
}
onCreate
にこの行を追加して、オプションをToolbar
に表示します
setHasOptionsMenu(true);
すでに自動生成されたファイルres/menu/menu.xml定義action_settingsがあります。
MainActivity.Javaには次のメソッドがあります。
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
switch (id) {
case R.id.action_settings:
// do stuff, like showing settings fragment
return true;
}
return super.onOptionsItemSelected(item); // important line
}
Fragment呼び出しのonCreateView()
メソッドで:
setHasOptionsMenu(true);
また、次の2つのメソッドを追加します。
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.fragment_menu, menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
switch (id) {
case R.id.action_1:
// do stuff
return true;
case R.id.action_2:
// do more stuff
return true;
}
return false;
}
最後に、新しいファイルを追加しますres/menu/fragment_menu.xml定義action_1およびaction_2。
このように、アプリがフラグメントを表示すると、メニューには3つのエントリが含まれます。
@Alexander Farberと@Sino Rajの回答を試しました。どちらの答えも素晴らしいですが、足りないものが見つかるまで、フラグメント内でonCreateOptionsMenuを使用できませんでした。
次のように、アクティビティにsetSupportActionBar(toolbar)を追加します。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.id.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
}
この答えが、同じ問題を抱えている人に役立つことを願っています。
コール
setSupportActionBar(toolbar)
内部
onViewCreated(...)
フラグメントの
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
Toolbar toolbar = (Toolbar) view.findViewById(R.id.toolbar);
((MainActivity)getActivity()).setSupportActionBar(toolbar);
setHasOptionsMenu(true);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.activity_add_customer, container, false);
setHasOptionsMenu(true);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.menu_sample, menu);
super.onCreateOptionsMenu(menu,inflater);
}