【问题标题】:android:onClick set on menuitem in xmlandroid:onClick 在 xml 中的 menuitem 上设置
【发布时间】:2012-11-22 19:43:57
【问题描述】:

亲爱的,我们可以在 xml 中将 onclick 与菜单项一起使用吗?如下所示。我试过了,但它不起作用。

<menu xmlns:android="http://schemas.android.com/apk/res/android" >

<item
    android:id="@+id/logout"
    android:onClick="onLogOut"
    android:title="@string/logout">
</item>

Java 代码:

public void onLogOut(MenuItem v) {
    Utility.LogError(TAG, "onLogOut Clicked");
    Toast.makeText(this, "onLogOut", Toast.LENGTH_SHORT).show();
}

}

onLogOut 没有被调用....

【问题讨论】:

  • 您的onLogOut() 函数位于何处?因为他们需要在活动中。不幸的是,您不能在 Fragments 中使用它们
  • 是的,我把它放在了活动中,并改变了它的签名,但它仍然没有被调用。新签名在 public boolean onLogOut(MenuItem v) {} 下面给出,现在它返回布尔值。仍然没有被调用。:)
  • i Just Noticed OS 也会抛出一些异常信息,例如 12-05 08:50:00.509: W/InputManagerService(59): 窗口已经聚焦,忽略焦点增益:com.android.internal。 view.IInputMethodClient$Stub$Proxy@45086d80 stackoverflow.com/questions/3140524/…
  • 直到 API 级别 11 才为 MenuItem 引入此功能 - 您是否有可能在旧设备上运行此功能?

标签: android xml menu onclick menuitem


【解决方案1】:

您是否已经尝试过让它与onOptionItemSelected() 函数一起使用?

onOptionsItemSelected

在 API 级别 1 中添加

boolean onOptionsItemSelected(MenuItem 项)

只要选择了选项菜单中的项目,就会调用此挂钩。默认实现简单地返回 false 以进行正常处理(调用项目的 Runnable 或根据需要向其 Handler 发送消息)。您可以将此方法用于您希望在没有其他设施的情况下对其进行处理的任何项目。

编辑:

我也为Handling click events找到了这个

处理点击事件

要在用户选择菜单项时执行操作,您必须实现 PopupMenu.OnMenuItemClickListener 接口并通过调用 setOnMenuItemclickListener() 将其注册到您的 PopupMenu。当用户选择一个项目时,系统会在你的界面中调用 onMenuItemClick() 回调。

例如(示例来自网站):

 public void showMenu(View v) {
    PopupMenu popup = new PopupMenu(this, v);

    // This activity implements OnMenuItemClickListener
    popup.setOnMenuItemClickListener(this);
    popup.inflate(R.menu.actions);
    popup.show();
}

@Override
public boolean onMenuItemClick(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.archive:
            archive(item);
            return true;
        case R.id.delete:
            delete(item);
            return true;
        default:
            return false;
    }
}

因此,如果您插入 onOptionsItemSelected 或 onMenuItemClick,您应该能够收到来自 onLogOut 的呼叫。

【讨论】:

    【解决方案2】:

    那是因为它只适用于 XML layouts,所以有一个菜单。对于菜单,您应该覆盖 onItemMenuSelected() 方法。阅读the documentation

    编辑:

    哎呀!显然这是可能的,但仅限于 Honeycomb 及更高版本。

    【讨论】:

    • 是的,您可能是对的,但link 此处的文档提到您也可以在 XML 中提供方法。
    • 啊,呵呵,这对我来说是新的,谢谢!显然这是真实的,但“在 API 级别 11 中引入”。
    【解决方案3】:

    使用

    android:onClick="onLogOutClick"
    

    而不是

    android:onClick="@string/onLogOutClick"
    

    用于添加带有菜单项的 onclick

    并且在Java中我们应该为这个onlick编写方法

    public void onLogOutClick(MenuItem item) {
         Log.d("MenuItem", "onLogOutClick :: "+item.getItemId());  
    }
    

    【讨论】:

    猜你喜欢
    • 2012-06-27
    • 2017-05-28
    • 1970-01-01
    • 1970-01-01
    • 2022-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多