0

我想在菜单按钮上单击以调用一个函数,该函数将弹出一个带有输入位置的窗口。我在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"/>

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

4

3 回答 3

6

您处理点击 a 的方式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. 无论如何,上面的代码都可以正常工作。

于 2013-01-31T10:20:43.207 回答
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);
}

尝试将这些覆盖方法放入活动中,以便轻松执行您的操作

于 2013-01-31T10:23:44.420 回答
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>
于 2015-03-07T20:16:02.680 回答