Android Fragment 的 onOptionsItemSelected 方法没有被调用
Android onOptionsItemSelected method of Fragment doesn't get called
关于该主题有很多问题,但我无法弄清楚我的问题。我在 MainActivity
(ActionBarActivity
) 中声明了一个菜单。现在我想在 Fragment
class 的 onOptionsItemSelected
中使用 MenuItem
。这是我的 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
中没有被调用,因为我在 Fragment
中没有看到 Toast
。我认为我的代码中遗漏了一些东西。提前致谢。
您必须在片段 onCreate
内调用 setHasOptionsMenu()
菜单相关方法才能工作。
您的 onCreateOptionsMenu()
方法没有扩充菜单文件:
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
}
inside onOptionsItemSelected()
in activity inside your switch after calling createNewNote()
instead of returning true
return super.onOptionsItemSelected(item)
关于该主题有很多问题,但我无法弄清楚我的问题。我在 MainActivity
(ActionBarActivity
) 中声明了一个菜单。现在我想在 Fragment
class 的 onOptionsItemSelected
中使用 MenuItem
。这是我的 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
中没有被调用,因为我在 Fragment
中没有看到 Toast
。我认为我的代码中遗漏了一些东西。提前致谢。
您必须在片段 onCreate
内调用 setHasOptionsMenu()
菜单相关方法才能工作。
您的 onCreateOptionsMenu()
方法没有扩充菜单文件:
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
}
inside onOptionsItemSelected()
in activity inside your switch after calling createNewNote()
instead of returning true
return super.onOptionsItemSelected(item)