3

Dear can we use onclick with menu item in xml. like below .i tried it but its not working.

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

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

Java Code :

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

}

onLogOut is not get called....

4

3 回答 3

7

use

android:onClick="onLogOutClick"

instead of

android:onClick="@string/onLogOutClick"

for adding onclick with menu item

and And in Java we should write the method for this onlick

public void onLogOutClick(MenuItem item) {
     Log.d("MenuItem", "onLogOutClick :: "+item.getItemId());  
}
于 2012-12-05T02:50:00.057 回答
1

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

onOptionsItemSelected

在 API 级别 1 中添加

boolean onOptionsItemSelected(MenuItem 项)

This hook is called whenever an item in your options menu is selected. 默认实现简单地返回 false 以进行正常处理(调用项目的 Runnable 或根据需要向其 Handler 发送消息)。您可以将此方法用于您希望在没有其他设施的情况下对其进行处理的任何项目。

编辑:

我还发现了这个用于处理点击事件

处理点击事件

要在用户选择菜单项时执行操作,您必须实现 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 的呼叫。

于 2016-09-06T09:09:29.983 回答
0

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

编辑:

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

于 2012-12-05T03:51:49.447 回答