关于这个话题有很多问题,但我无法弄清楚我的问题。我在MainActivity
(ActionBarActivity
)中声明了一个菜单。现在,我希望在MenuItem
课程的onOptionsItemSelected
中使用Fragment
。这是我的MainActivity
方法
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// toggle nav drawer on selecting action bar app icon/title
if (mDrawerToggle.onOptionsItemSelected(item)) {
return true;
}
// Handle action bar actions click
switch (item.getItemId()) {
case R.id.add_note:
createNewNote();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
private void createNewNote() {
Intent addIntent = new Intent(MainActivity.this, AddNote.class);
startActivity(addIntent);
}
和Fragment
方法
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.add_note:
Toast.makeText(getActivity(), "Entered into fragment", Toast.LENGTH_LONG).show();
createNewNote();
return true;
default:
break;
}
return super.onOptionsItemSelected(item);
}
private void createNewNote() {
Intent addIntent = new Intent(getActivity(), AddNote.class);
startActivity(addIntent);
}
此处MainActivity onOptionsItemSelected
即使在Fragment
中也会被调用,但Fragment
中没有被调用,因为我在Toast
中看不到Fragment
。我认为在我的代码中遗漏了一些东西。提前谢谢。
答案 0 :(得分:0)
您必须在片段的setHasOptionsMenu()
内调用onCreate
才能使用与菜单相关的方法。
答案 1 :(得分:0)
您的onCreateOptionsMenu()
方法不会使菜单文件膨胀:
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
}
答案 2 :(得分:0)
onOptionsItemSelected()
而不是返回createNewNote()
返回true
之后,在交换机内的super.onOptionsItemSelected(item)
内的内