当点击具有actionLayout设置的菜单项时,onOptionsItemSelected()未被调用

6
在我的操作栏中,我定义了一个菜单项,可以通过以下代码显示文本“完成”:
Menu.xml:
<menu xmlns:android="http://schemas.android.com/apk/res/android" >

<item android:id="@+id/action_register_text"
    android:actionLayout="@layout/action_done_text"
    android:title="@string/action_done"
    android:showAsAction="always"/>

</menu>

action_done_text.xml:

<?xml version="1.0" encoding="utf-8"?>

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/expand_activities_button"
android:layout_height="match_parent"
android:layout_width="wrap_content"
android:layout_gravity="center"
android:clickable="true"
android:focusable="true"
android:addStatesFromChildren="true">

<TextView
    android:id="@+id/register_action_bar_done"
    android:layout_width="53dp"
    android:layout_height="35dp"
    android:layout_gravity="center"
    android:layout_marginRight="10dip"
    android:gravity="center"
    android:text="DONE" />

</FrameLayout>

我在代码中正确实现了onCreateOptionsMenu,视图可以正确显示文本。但是当我点击“DONE”文本时,onOptionsItemSelected没有被调用。对我来说,似乎单击事件未被识别。
我想知道上述方式是否不是添加文本菜单项的好方法?

1
请不要在问题标题前加上“Android”前缀,底部的标签已经足够了,这只会使标题变得混乱。回调未被触发是正常的,因为您可能在操作布局中有不同的视图,而Android无法猜测哪个应该触发事件。在onCreateOptionMenu()中获取菜单项的引用,检索其操作视图并在其上设置单击侦听器。 - user
1个回答

5

按照onOptionsItemSelected在使用actionLayout(SherlockActionBar)时未被调用的问题中所示使用此选项。

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getSupportMenuInflater().inflate(R.menu.map_menu, menu);
    for (int i = 0; i < menu.size(); i++) {
        MenuItem item = menu.getItem(i);
        if (item.getItemId() == R.id.menu_more) {
            itemChooser = item.getActionView();
            if (itemChooser != null) {
                itemChooser.setOnClickListener(this);
            }
        }
    }
    return super.onCreateOptionsMenu(menu);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接