android - fragment 的 onOptionsItemSelected 没有被调用

标签 android android-fragments

我的 Fragment 用特定的选项项替换了父 Activity 选项,但是当我单击该项目时,即使我已经覆盖了 Fragment 中的方法,也只有 Activity 的 onOptionItemSelected 被调用。我错过了什么吗?

fragment 的方法:

@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);
    }
}

Activity的方法:

@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;
}

Logcat 输出:

MainActivity.onCreateOptionsMenu
Fragment.onCreateOptionsMenu
MainActivitiy.onOptionsItemSelected

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

最佳答案

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

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

Return false to allow normal menu processing to proceed, true to consume it here

关于android - fragment 的 onOptionsItemSelected 没有被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18133443/

相关文章:

android - 从首选项标题开始 Activity

android - 在 fragment 中设置 float 操作按钮的可见性

安卓 fragment : "cannot cast android.app.Fragment"

android - 将 android 库项目添加到 android 项目会阻止 Ant 构建

c# - Android 7.0 上不会调用 OnCreateOptionsMenu

Android文件夹列表,按名称跳过文件夹

android - fragment 中的 AsyncTask 不更新 UI

java - Android ListFragment 打乱了最初未呈现的元素的顺序

android - 发布到Android市场时如何在应用程序上放置关键字或元标记

java - 当 fragment 膨胀时,抽屉导航启动未知 Activity