片段的Android onOptionsItemSelected方法不会被调用

时间:2015-02-05 15:05:39

标签: java android android-fragments android-actionbaractivity

关于这个话题有很多问题,但我无法弄清楚我的问题。我在MainActivityActionBarActivity)中声明了一个菜单。现在,我希望在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 。我认为在我的代码中遗漏了一些东西。提前谢谢。

3 个答案:

答案 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)内的