android - 使用自定义操作 View 时未调用 onOptionsItemSelected

标签 android

我为我的其中一个操作栏 MenuBar 设置了一个自定义 View ,如下所示

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        getMenuInflater().inflate(R.menu.loop_thread, menu);
        ImageView iv = (ImageView)(getLayoutInflater().inflate(R.layout.image_container, null));
        menu.findItem(R.id.action_filter).setActionView(iv);
        ...

但是当我在我的应用程序中点击该菜单项时,onOptionsItemSelected() 不会被调用。 (我已经通过在方法开始时设置断点来验证这一点)。如果我在操作栏中点击其他按钮,则会调用 onOptionsItemSelected()。

这是自定义 View 的 xml 代码:

<?xml version="1.0" encoding="utf-8"?>
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/ibtnFilterMenu"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@android:color/darker_gray"
    android:src="@drawable/btn_action_down_arrow"
    style = "@android:style/Widget.ActionButton"/>

我也尝试在菜单 xml 文件上设置操作 View :

    <item android:id="@+id/action_filter"
    android:title="@string/filter_options"
    android:actionLayout="@layout/image_container"
    android:orderInCategory="100"
    android:showAsAction="ifRoom" />

注意:我知道我可以使图像可点击,并为它手动设置一个 onClickListener,但为了学习,我想深入了解一下。

最佳答案

似乎膨胀和绘制 Action 项的底层代码没有连接由 setActionView()android:actionLayout="设置的自定义布局的内容@layout/image_container"

可能是因为布局可以是任何东西,而只是一个按钮或图像。所以我必须手动设置图标的 onClickListener 。出于组织的目的,我只是从我的图标的 OnClick 方法中调用 onOptionsItemSelected(),但我可以只在 onClick 中定义操作> 方法。

首先,在 Activity 中声明 filterMenuItem。

MenuItem filterMenuItem;

public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.loop_thread, menu);
    filterMenuItem = menu.findItem(R.id.action_filter);

    filterMenuItem.getActionView().setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            MainActivity.this.onOptionsItemSelected(filterMenuItem);
    }
});

关于android - 使用自定义操作 View 时未调用 onOptionsItemSelected,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26170423/

相关文章:

java - 如何在位图上居中和缩放叠加的可绘制图标

android - 从android模拟器发送短信到第二个模拟器实例

java - 如何在Android中实现持久队列

android - 尝试通过 ADB WLAN 连接运行 'adb reboot' 时 ADB 进程挂起

javascript - 如何跨 android 和 JS bridge 配置通用数据模型?

java - Realm 中的 allObjects() 方法是否已弃用?

android - 是否所有智能手机浏览器(Android 和 iOS)都支持多点触控/手势?

android - 如何在android中将drawable设置为ListView

Android:将 2 个不同的时区转换为 UTC 并计算它们在天数、小时数和分钟数上的差异

android - -webkit-背景剪辑 :text not work in Android phone