如何在单击菜单选项上调用函数?

时间:2013-01-31 10:06:40

标签: android

我想点击菜单按钮来调用一个函数, 该函数将弹出一个带有输入位置的窗口。 我在activity_main.xml中添加了以下行

android:onClick="getURL"

并在mainActivity.java中定义了一个函数:

public void getURL(View view) {...}

然而,当我加载应用程序时,我得到:

01-31 09:59:13.479: E/AndroidRuntime(761): FATAL EXCEPTION: main
01-31 09:59:13.479: E/AndroidRuntime(761): android.view.InflateException: Couldn't resolve menu item onClick handler getURL in class com.example.remoteswitch.MainActivity

我的菜单设置如下:

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

<item
    android:id="@+id/menu_settings"
    android:orderInCategory="100"
    android:showAsAction="never"
    android:title="@string/menu_settings"
    android:onClick="getURL"/>

任何想法为什么会发生在我身上?

3 个答案:

答案 0 :(得分:6)

您处理点击Menu Item的方式如下:

首先,设置选项菜单:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater mnuInflater = getSupportMenuInflater();
    mnuInflater.inflate(R.menu.your_menu_xml, menu);        
    return true;
}

处理点击次数:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case R.id.menu_settings:
        // EITHER CALL THE METHOD HERE OR DO THE FUNCTION DIRECTLY
        yourMethod();

        return true;

    default:
        return super.onOptionsItemSelected(item);
    }
}

yourMethod()这里执行此功能:

private void yourMethod() {
    // TODO Auto-generated method stub      
}

我不确定onClick方法在Options Menu时是否有效/有效。无论如何,上面的代码都可以正常工作。

答案 1 :(得分:1)

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater menuInflater = getMenuInflater();
    menuInflater.inflate(R.menu.menuxml_name, menu);
    return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // TODO Auto-generated method stub
    switch(item.getItemId())    
    {
        case R.id.menu_settings:
            getURL();   
            break;
    }
    return super.onOptionsItemSelected(item);
}

尝试将这些覆盖方法用于活动,以便轻松执行操作

答案 2 :(得分:0)

只是为旧帖子添加内容: 首先,您的方法的参数应该是MenuItem而不是View(打赌您已经知道)。其次,来自官方谷歌开发者网站,它说:

  

提示:Android 3.0增加了使用android:onClick属性为XML中的菜单项定义点击行为的功能。属性的值必须是使用菜单的活动定义的方法的名称。该方法必须是公共的并接受单个MenuItem参数 - 当系统调用此方法时,它会传递所选的菜单项。有关详细信息和示例,请参阅菜单资源文档。

要使用此选项,请在活动中定义一个方法(单击选项菜单项时要调用的方法)。例如:

 public void showOptionMenuItem(MenuItem item) {
    Toast.makeText(getApplicationContext(), 
          "You have selected the GET URL option", Toast.LENGTH_LONG).show();
   }

然后在XML中执行此操作:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" tools:context=".MainActivity">
<item android:id="@+id/action_settings" android:title="@string/action_settings"
    android:orderInCategory="100" app:showAsAction="never" />

  ...

<item android:id="@+id/getUrl"
    android:onClick="getURL" //<----
    android:title="@string/get_url"/>

</menu>