java - onOptionsItemSelected 未从 fragment 内调用

标签 java android

由于某种原因,当我单击与其关联的按钮时,我的 optionItemSelected 没有被调用。木材日志未被调用,但在我单击按钮后,它出现在日志中:

D/ViewRootImpl@ba4d36e[POIHistoryFlowActivity]: ViewPostImeInputStage processPointer 0
D/ViewRootImpl@ba4d36e[POIHistoryFlowActivity]: ViewPostImeInputStage processPointer 1

这是我的代码:

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

    @Override
    public void onCreateOptionsMenu(final Menu menu, final MenuInflater inflater) {
        inflater.inflate(R.menu.activity_recent_destinations, menu);
        Timber.d("Menu was inflated");
    }

    @Override
    public boolean onOptionsItemSelected(final MenuItem item) {
        switch (item.getItemId()) {
            case R.id.menu_action_item_clear:
                Timber.d("Clear button was clicked");
                // clear the destinations
                return true;

            default:
                return super.onOptionsItemSelected(item);
        }
    }

在类似的 fragment 中,父级的 Activity 不会覆盖 onCreateOptionsItem()onOptionsItemSelected(),但它们的关联按钮在此 fragment 中不起作用,并且在之后用调试器梳理所有内容,我不知道根本原因可能是什么。任何帮助我都会非常感激!

更新: Activity_recent_destinations.xml

<?xml version="1.0" encoding="utf-8"?>
<menu
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <item
        android:id="@+id/menu_action_item_clear"
        android:title="@string/menu_item_title_clear"
        app:actionLayout="@layout/action_item_clear"
        app:showAsAction="always" />
</menu>

最佳答案

您正在为此项目使用“操作布局”。这就像普通 View 一样,点击它不会触发 onOptionsItemSelected 回调。您必须获取对布局本身的引用并添加点击监听器:

@Override
public void onCreateOptionsMenu(final Menu menu, final MenuInflater inflater) {
    inflater.inflate(R.menu.activity_recent_destinations, menu);
    MenuItem item = menu.findItem(R.id.menu_action_item_clear);
    View actionView = item.getActionView();
    // Set the listener on the root view or any children if necessary
    actionView.setOnClickListener(...);
}

关于java - onOptionsItemSelected 未从 fragment 内调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55696777/

相关文章:

java - Hive 查询在 INSERT OVERWRITE 上失败

java - 无法添加窗口Android对话框

android - 使用视口(viewport)元标记缩放适合移动 Web 内容

android - 如何在 root 的 android 设备上更改文件的组 ID?

java - 尝试编译基于 Maven 的应用程序时出错

java - 无法将文本文件转换为 json

Java内存不足异常

android - Ice Cream Sandwich 上的 OpenGL 黑色纹理

java - 如何使用 Retrofit 2 返回对象

android - 多列中的项目 - 微调器