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)