片段的 onOptionsItemSelected 没有被调用

新手上路,请多包涵

我的片段用特定的选项项替换了父活动选项,但是当我单击该项目时,只有活动的 onOptionItemSelected 被调用,尽管我已经覆盖了片段中的方法。我错过了什么吗?

片段的方法:

 @Override
public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setHasOptionsMenu(true);
}

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {

    Log.d(TAG, "Fragment.onCreateOptionsMenu");

    if (mPasteMode) {
        menu.clear();
        inflater.inflate(R.menu.contexual_paste, menu);
        getActivity().getActionBar().setTitle("PasteMode");
    }
    super.onCreateOptionsMenu(menu, inflater);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    Log.d(TAG, "Fragment.onOptionsItemSelected");

    switch (item.getItemId()) {
        case R.id.context_action_paste:
            Toast.makeText(getActivity(),
                     "It worked ",
                    Toast.LENGTH_SHORT).show();
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

活动的方法:

 @Override
public boolean onCreateOptionsMenu(Menu menu) {

    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    Log.d(TAG, "MainActivitiy.onOptionsItemSelected");
    switch (item.getItemId()) {
        case R.id.action_refresh:
            Toast.makeText(this, "Action Refresh selected", Toast.LENGTH_SHORT).show();
            break;
        default:
            break;
    }
    return true;
}

日志输出:

 MainActivity.onCreateOptionsMenu
Fragment.onCreateOptionsMenu
MainActivitiy.onOptionsItemSelected

那么我怎样才能调用片段的 onOptionsItemSelected 呢?

原文由 Nima GT 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 854
2 个回答

您没有链接到活动方法中的超类。 Please have onCreateOptionsMenu() return super.onCreateOptionsMenu(menu) , and have onOptionsItemSelected() return super.onOptionsItemSelected(item) (except for the item that you are handling, which should return true 表示你已经处理了事件)。

原文由 CommonsWare 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果您的 Activity 的 onOptionsItemSelected 方法 返回 true则该调用在活动中被消耗并且不会调用 Fragment 的 onOptionsItemSelected。 因此,通过 super.onOptionsItemSelected 调用 在 Activity onOptionsItemSelected 方法 或父类实现中返回 false(默认实现返回 false)。

根据 Activity 类 javadoc,方法 Activity.onOptionsItemSelected 应该:

返回 false 以允许进行正常的菜单处理,返回 true 以在此处使用它

原文由 fandasson 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏