【问题标题】:OnMenuItemSelected isn't called when layout is set for menu item为菜单项设置布局时不调用 OnMenuItemSelected
【发布时间】:2013-07-19 20:16:35
【问题描述】:

我有一个从 main_menu.xml 膨胀的菜单:

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item 
        android:id="@+id/act_sync" 
        android:showAsAction="always"
        android:actionLayout="@layout/sync_action"
        android:icon="@android:drawable/ic_popup_sync" />
</menu>

这是活动中的代码:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main_menu, menu);
    return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    MyMessageHandler.debug("menu item selected");
    switch(item.getItemId()){
    case R.id.act_sync:
        sync();
        return true;
    }
    return super.onOptionsItemSelected(item);
}

但是当我触摸菜单项时不会调用 onOptionsItemSelected。当我删除菜单项的 actionLayout 属性时,它工作正常。我怎样才能解决这个问题?
谢谢。

【问题讨论】:

    标签: android android-layout android-actionbar menuitem android-inflate


    【解决方案1】:

    除了 Vipul Shah 提供的答案。

    确保禁用操作布局中所有项目的可点击选项:

    android:clickable="false"
    

    否则,它可能会窃取点击,导致您仍然无法收到 onClick 回调。

    【讨论】:

    • 小时搜索。谢谢!
    • 救了我的命……!没有这个答案就行不通...谢谢!
    • 非常感谢。让我免于背痛:)
    • 非常重要。谢谢你的回答。这个 + 来自 Vipul Shah 的那个是为我做的......
    • 很多 Thanxxxx,你节省了我的时间
    【解决方案2】:

    你应该使用下面的sn-p(仅供参考)

    @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            MenuInflater inflater = getMenuInflater();
            inflater.inflate(R.menu.main_menu, menu);
            final Menu m = menu;
            final MenuItem item = menu.findItem(R.id.ActionConnection);
            item.getActionView().setOnClickListener(new OnClickListener() {
    
                @Override
                public void onClick(View v) {   
                    sync();
                }
            });
            return true;
        }
    

    【讨论】:

    • 谢谢。我已经测试过item.setOnMenuItemClickListener,但它没有用。关键是获取我的自定义视图并在其上设置 clickListener。感谢您的帮助:) 即使 onClick() 不应由 @Override 注释。我编辑了您对有效版本的回复,并且更加摘要;)
    • 这是唯一对我有用的解决方案。我试过 setOnMenuItemClickListener、onMenuItemSelected 等。
    • 点击监听器应该在我认为的布局上
    猜你喜欢
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 2013-12-08
    • 2018-10-04
    • 2022-11-22
    • 2011-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多