作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Android API 15 中的简单 View 存在一个奇怪的问题。在此 View 中,我有一个包含 2 个菜单项的简单菜单。此代码适用于其他 Android API,但不适用于装有 Android 4.0.3 的手机:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/root_menu"
android:icon="@android:drawable/ic_menu_help"
android:showAsAction="always"
android:title="Help">
<menu>
<item
android:id="@+id/menu_about"
android:onClick="aboutDialog"
android:showAsAction="never"
android:title="About"/>
</menu>
</item>
</menu>
这是 Activity
public class HomeActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.home);
}
/**
* Crea l'action bar
*
* @param menu
* @return
*/
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_actionbar, menu);
return true;
}
/**
* Apertura del dialog box con le informazioni sulla versione del programma
*
* @param v
*/
public void aboutDialog(MenuItem v) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Test")
.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// FIRE ZE MISSILES!
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// User cancelled the dialog
}
});
// Create the AlertDialog object and return it
builder.create().show();
}
}
所以这段代码没有什么奇怪的。但是当我尝试在设备上运行时,我遇到了这个异常:
android.view.InflateException: Couldn't resolve menu item onClick handler
aboutDialog in class android.view.ContextThemeWrapper
at android.view.MenuInflater$InflatedOnMenuItemClickListener.<init> (MenuInflater.java:202)
at android.view.MenuInflater$MenuState.setItem(MenuInflater.java:402)
at android.view.MenuInflater$MenuState.addItem(MenuInflater.java:436)
at android.view.MenuInflater.parseMenu(MenuInflater.java:173)
at android.view.MenuInflater.parseMenu(MenuInflater.java:151)
at android.view.MenuInflater.inflate(MenuInflater.java:95)
at
it.mobile.activity.home.HomeActivity.onCreateOptionsMenu(HomeActivity.java:38)
at android.app.Activity.onCreatePanelMenu(Activity.java:2444)
at com.android.internal.policy.impl.PhoneWindow.preparePanel(PhoneWindow.java:388)
at com.android.internal.policy.impl.PhoneWindow.invalidatePanelMenu(PhoneWindow.java:739)
at com.android.internal.policy.impl.PhoneWindow$1.run(PhoneWindow.java:2833)
at android.os.Handler.handleCallback(Handler.java:605)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4424)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NoSuchMethodException: aboutDialog
[interface android.view.MenuItem]
at java.lang.Class.getConstructorOrMethod(Class.java:460)
at java.lang.Class.getMethod(Class.java:915)
at android.view.MenuInflater$InflatedOnMenuItemClickListener.<init>
但是我不明白问题出在哪里。使用另一台设备一切正常!
最佳答案
不确定如何仅使用 xml 来解决它。从代码的角度来看,您将必须实现
public boolean onOptionsItemSelected(菜单项)
然后根据菜单项调用所需的处理程序。
关于android:onClick 不适用于 Android 4.0.3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21457929/
我是一名优秀的程序员,十分优秀!