我想点击菜单按钮来调用一个函数, 该函数将弹出一个带有输入位置的窗口。 我在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"/>
任何想法为什么会发生在我身上?
答案 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>