理解为什么onCreateOptionsMenu不显示菜单 [英] Understanding why onCreateOptionsMenu is not displaying a menu

查看:227
本文介绍了理解为什么onCreateOptionsMenu不显示菜单的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我读通过Android的傻瓜。一个例子使用了onCreateOptionsMenu的(我已经添加了日志消息):

  @覆盖
公共布尔onCreateOptionsMenu(功能菜单){
    super.onCreateOptionsMenu(菜单);
    MenuInflater MI = getMenuInflater();
    mi.inflate(R.menu.list_menu,菜单);
    Log.d(ReminderListActivity,为什么没有菜单?);
    返回true;
}
 

我在Eclipse中没有错误,当我运行模拟器上的应用程序,我可以看到日志消息:

 十一月七号至10日:38:56.993:WARN / KeyCharacterMap(382):没有键盘ID 0
11月七号至10日:38:56.993:WARN / KeyCharacterMap(382):使用默认的键盘对应:/system/usr/keychars/qwerty.kcm.bin
11月七号至10日:38:57.023:DEBUG /你好(382):为什么没有菜单?
 

菜单不显示,我不知道如何工作了,为什么不。任何人可以帮助我吗?

下面是list_menu.xml:

 < XML版本=1.0编码=UTF-8&GT?;
<菜单
  的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android>
  <项目
    机器人:ID =@ + ID / menu_insert
    机器人:图标=@机器人:可绘制/ ic_menu_add
    机器人:标题=@字符串/ menu_insert
    />
< /菜单>
 

下面是更多的LogCat中:

  07-10 18:15:11.501:DEBUG / KeyguardViewMediator(58):pokeWakelock(5000)
07-10 18:15:11.881:DEBUG / KeyguardViewMediator(58):pokeWakelock(5000)
07-10 18:15:12.201:信息/ ARMAssembler(58):产生scanline__00000077:03545404_00000004_00000000 [47 IPP](67英寸),在[0x356548:0x356654]在1684001 NS
07-10 18:15:12.251:信息/ ARMAssembler(58):产生scanline__00000177:03515104_00001001_00000000 [91 IPP(114英寸),在[0x356658:0x356820]在901000 NS
07-10 18:15:19.494:WARN / KeyCharacterMap(296):没有键盘ID 0
07-10 18:15:19.494:WARN / KeyCharacterMap(296):使用默认的键盘对应:/system/usr/keychars/qwerty.kcm.bin
07-10 18:15:19.501:DEBUG / ReminderListActivity(296):为什么没有菜单?
07-10 18:15:39.422:调试/ AndroidRuntime(303):>>>>>>>>>>>>>> AndroidRuntime START<<<<<<<<<<<<<<
07-10 18:15:39.422:DEBUG / AndroidRuntime(303):CheckJNI为ON
07-10 18:15:39.671:DEBUG / AndroidRuntime(303):---注册本地函数---
07-10 18:15:40.621:DEBUG / AndroidRuntime(303):关闭虚拟机
07-10 18:15:40.831:DEBUG / JDWP(303):adbd断开
07-10 18:15:40.851:信息/ AndroidRuntime(303):注:连接线的捆扎线#3'失败
07-10 18:15:41.671:DEBUG / AndroidRuntime(311):>>>>>> >>>>>>> AndroidRuntime START<<<<<<<<<<<<<<
07-10 18:15:41.671:DEBUG / AndroidRuntime(311):CheckJNI为ON
07-10 18:15:41.891:DEBUG / AndroidRuntime(311):---注册本地函数---
07-10 18:15:42.861:信息/ ActivityManager(58):强制停止包com.dummies.android.taskreminder的uid = 10034
07-10 18:15:42.891:信息/工艺(58):发送信号。 PID:296 SIG:9
07-10 18:15:42.971:信息/窗口管理器(58):WIN死亡:窗口{450347c8 com.dummies.android.taskreminder / com.dummies.android.taskreminder.ReminderListActivity暂停= FALSE}
07-10 18:15:42.991:信息/ UsageStats(58):com.android.launcher意外的简历时,如果已经恢复了com.dummies.android.taskreminder
07-10 18:15:43.061:信息/ ActivityManager(58):启动活动:意向{行为= android.intent.action.MAIN猫= [android.intent.category.LAUNCHER] FLG = 0x10000000处CMP = com.dummies。 android.taskreminder / .ReminderListActivity}
07-10 18:15:43.081:DEBUG / AndroidRuntime(311):关闭虚拟机
07-10 18:15:43.091:DEBUG / dalvikvm(311):调试器分离;对象注册了1项
07-10 18:15:43.141:信息/ AndroidRuntime(311):注:连接线的捆扎线#3'失败
07-10 18:15:43.371:信息/ ActivityManager(58):启动PROC com.dummies.android.taskreminder的活动com.dummies.android.taskreminder / .ReminderListActivity:PID = 318 UID = 10034导报= {}
07-10 18:15:43.411:WARN / InputManagerService(58):得到的RemoteException发送SETACTIVE(假)通知,为PID 296 UID 10034
07-10 18:15:43.961:WARN / ActivityThread(318):应用com.dummies.android.taskreminder正在等待调试器在端口8100 ...
07-10 18:15:44.011:信息/的System.out(318):发送等待块
07-10 18:15:44.311:信息/ dalvikvm(318):调试器被激活
07-10 18:15:44.441:信息/的System.out(318):调试器连接
07-10 18:15:44.451:信息/的System.out(318):等待调试器来解决?
07-10 18:15:44.651:信息/的System.out(318):等待调试器来解决?
07-10 18:15:44.851:信息/的System.out(318):等待调试器来解决?
07-10 18:15:45.051:信息/的System.out(318):等待调试器来解决?
07-10 18:15:45.081:信息/ ARMAssembler(58):产生scanline__00000077:03515104_00000000_00000000 [33 IPP](47英寸),在[0x369920:0x3699dc在556000 NS
07-10 18:15:45.251:信息/的System.out(318):等待调试器来解决?
07-10 18:15:45.461:信息/的System.out(318):等待调试器来解决?
07-10 18:15:45.662:信息/的System.out(318):等待调试器来解决?
07-10 18:15:45.861:信息/的System.out(318):等待调试器来解决?
07-10 18:15:46.0​​61:信息/的System.out(318):等待调试器来解决?
07-10 18:15:46.271:信息/的System.out(318):等待调试器来解决?
07-10 18:15:46.473:信息/的System.out(318):等待调试器来解决?
07-10 18:15:46.675:信息/的System.out(318):等待调试器来解决?
07-10 18:15:46.881:信息/的System.out(318):调试器已落户(1404)
07-10 18:15:48.112:信息/ ActivityManager(58):显示活动com.dummies.android.taskreminder / .ReminderListActivity:4788毫秒(共4788毫秒)
07-10 18:15:53.321:DEBUG / dalvikvm(129):GC_EXPLICIT释放2287对象/在114ms 109048字节
07-10 18:16:11.591:WARN / KeyCharacterMap(318):没有键盘ID 0
07-10 18:16:11.591:WARN / KeyCharacterMap(318):使用默认的键盘对应:/system/usr/keychars/qwerty.kcm.bin
07-10 18:16:11.621:DEBUG / ReminderListActivity(318):为什么没有菜单?
 

下面是完整的类:

 包com.dummies.android.taskreminder;

进口android.app.ListActivity;
进口android.content.Intent;
进口android.os.Bundle;
进口android.util.Log;
进口android.view.ContextMenu;
进口android.view.ContextMenu.ContextMenuInfo;
进口android.view.Menu;
进口android.view.MenuInflater;
进口android.view.View;
进口android.widget.ArrayAdapter;
进口android.widget.ListView;

公共类ReminderListActivity扩展ListActivity {
    / **第一次创建活动时调用。 * /
    @覆盖
    公共无效的onCreate(包savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.reminder_list);

        的String []项目=新的String [] {富,酒吧,菲斯,宾};
        ArrayAdapter<字符串>适配器=新的ArrayAdapter<字符串>(这一点,R.layout.reminder_row,R.id.text1,项目);

        setListAdapter(适配器);

        registerForContextMenu(getListView());
    }

    @覆盖
    保护无效onListItemClick(ListView的L,视图V,INT位置,长的id){
        super.onListItemClick(L,V,位置ID);
        意图I =新的意图(这一点,ReminderEditActivity.class);
        i.putExtra(RowId的,身份证);
        startActivity(ⅰ);
    }

    @覆盖
    公共无效onCreateContextMenu(文本菜单菜单,视图V,ContextMenuInfo menuInfo){
        super.onCreateContextMenu(菜单,V,menuInfo);
    }

    @覆盖
    公共布尔onCreateOptionsMenu(功能菜单){
        super.onCreateOptionsMenu(菜单);
        MenuInflater MI = getMenuInflater();
        mi.inflate(R.menu.list_menu,菜单);
        Log.d(ReminderListActivity,为什么没有菜单?);
        返回true;
    }
}
 

解决方案

onCreateOptionsMenu()被调用时,活动创建。我们不需要显式调用它。 检查活动是否有标题栏或not.If不要再使其可见或删除没有标题栏属性activity.Try可能它的工作。

I'm reading through Android For Dummies. One example makes use of the onCreateOptionsMenu (I've added a log message):

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);
    MenuInflater mi = getMenuInflater();
    mi.inflate(R.menu.list_menu, menu);
    Log.d("ReminderListActivity","Why is there no menu?");
    return true;
}

I have no errors in Eclipse and when I run the application on the emulator, I can see the log message:

07-10 11:38:56.993: WARN/KeyCharacterMap(382): No keyboard for id 0
07-10 11:38:56.993: WARN/KeyCharacterMap(382): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
07-10 11:38:57.023: DEBUG/hello(382): Why is there no menu?

The menu does not display and I'm not sure how to work out why not. Can anybody help me?

Here is list_menu.xml:

<?xml version="1.0" encoding="utf-8"?>
<menu
  xmlns:android="http://schemas.android.com/apk/res/android">
  <item
    android:id="@+id/menu_insert"
    android:icon="@android:drawable/ic_menu_add"
    android:title="@string/menu_insert"
    />
</menu>

Here is more LogCat:

07-10 18:15:11.501: DEBUG/KeyguardViewMediator(58): pokeWakelock(5000)
07-10 18:15:11.881: DEBUG/KeyguardViewMediator(58): pokeWakelock(5000)
07-10 18:15:12.201: INFO/ARMAssembler(58): generated scanline__00000077:03545404_00000004_00000000 [ 47 ipp] (67 ins) at [0x356548:0x356654] in 1684001 ns
07-10 18:15:12.251: INFO/ARMAssembler(58): generated scanline__00000177:03515104_00001001_00000000 [ 91 ipp] (114 ins) at [0x356658:0x356820] in 901000 ns
07-10 18:15:19.494: WARN/KeyCharacterMap(296): No keyboard for id 0
07-10 18:15:19.494: WARN/KeyCharacterMap(296): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
07-10 18:15:19.501: DEBUG/ReminderListActivity(296): Why is there no menu?
07-10 18:15:39.422: DEBUG/AndroidRuntime(303): >>>>>>>>>>>>>> AndroidRuntime START <<<<<<<<<<<<<<
07-10 18:15:39.422: DEBUG/AndroidRuntime(303): CheckJNI is ON
07-10 18:15:39.671: DEBUG/AndroidRuntime(303): --- registering native functions ---
07-10 18:15:40.621: DEBUG/AndroidRuntime(303): Shutting down VM
07-10 18:15:40.831: DEBUG/jdwp(303): adbd disconnected
07-10 18:15:40.851: INFO/AndroidRuntime(303): NOTE: attach of thread 'Binder Thread #3' failed
07-10 18:15:41.671: DEBUG/AndroidRuntime(311): >>>>>> >>>>>>> AndroidRuntime START <<<<<<<<<<<<<<
07-10 18:15:41.671: DEBUG/AndroidRuntime(311): CheckJNI is ON
07-10 18:15:41.891: DEBUG/AndroidRuntime(311): --- registering native functions ---
07-10 18:15:42.861: INFO/ActivityManager(58): Force stopping package com.dummies.android.taskreminder uid=10034
07-10 18:15:42.891: INFO/Process(58): Sending signal. PID: 296 SIG: 9
07-10 18:15:42.971: INFO/WindowManager(58): WIN DEATH: Window{450347c8 com.dummies.android.taskreminder/com.dummies.android.taskreminder.ReminderListActivity paused=false}
07-10 18:15:42.991: INFO/UsageStats(58): Unexpected resume of com.android.launcher while already resumed in com.dummies.android.taskreminder
07-10 18:15:43.061: INFO/ActivityManager(58): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.dummies.android.taskreminder/.ReminderListActivity }
07-10 18:15:43.081: DEBUG/AndroidRuntime(311): Shutting down VM
07-10 18:15:43.091: DEBUG/dalvikvm(311): Debugger has detached; object registry had 1 entries
07-10 18:15:43.141: INFO/AndroidRuntime(311): NOTE: attach of thread 'Binder Thread #3' failed
07-10 18:15:43.371: INFO/ActivityManager(58): Start proc com.dummies.android.taskreminder for activity com.dummies.android.taskreminder/.ReminderListActivity: pid=318 uid=10034 gids={}
07-10 18:15:43.411: WARN/InputManagerService(58): Got RemoteException sending setActive(false) notification to pid 296 uid 10034
07-10 18:15:43.961: WARN/ActivityThread(318): Application com.dummies.android.taskreminder is waiting for the debugger on port 8100...
07-10 18:15:44.011: INFO/System.out(318): Sending WAIT chunk
07-10 18:15:44.311: INFO/dalvikvm(318): Debugger is active
07-10 18:15:44.441: INFO/System.out(318): Debugger has connected
07-10 18:15:44.451: INFO/System.out(318): waiting for debugger to settle...
07-10 18:15:44.651: INFO/System.out(318): waiting for debugger to settle...
07-10 18:15:44.851: INFO/System.out(318): waiting for debugger to settle...
07-10 18:15:45.051: INFO/System.out(318): waiting for debugger to settle...
07-10 18:15:45.081: INFO/ARMAssembler(58): generated scanline__00000077:03515104_00000000_00000000 [ 33 ipp] (47 ins) at [0x369920:0x3699dc] in 556000 ns
07-10 18:15:45.251: INFO/System.out(318): waiting for debugger to settle...
07-10 18:15:45.461: INFO/System.out(318): waiting for debugger to settle...
07-10 18:15:45.662: INFO/System.out(318): waiting for debugger to settle...
07-10 18:15:45.861: INFO/System.out(318): waiting for debugger to settle...
07-10 18:15:46.061: INFO/System.out(318): waiting for debugger to settle...
07-10 18:15:46.271: INFO/System.out(318): waiting for debugger to settle...
07-10 18:15:46.473: INFO/System.out(318): waiting for debugger to settle...
07-10 18:15:46.675: INFO/System.out(318): waiting for debugger to settle...
07-10 18:15:46.881: INFO/System.out(318): debugger has settled (1404)
07-10 18:15:48.112: INFO/ActivityManager(58): Displayed activity com.dummies.android.taskreminder/.ReminderListActivity: 4788 ms (total 4788 ms)
07-10 18:15:53.321: DEBUG/dalvikvm(129): GC_EXPLICIT freed 2287 objects / 109048 bytes in 114ms
07-10 18:16:11.591: WARN/KeyCharacterMap(318): No keyboard for id 0
07-10 18:16:11.591: WARN/KeyCharacterMap(318): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
07-10 18:16:11.621: DEBUG/ReminderListActivity(318): Why is there no menu?

Here is the complete class:

package com.dummies.android.taskreminder;

import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class ReminderListActivity extends ListActivity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.reminder_list);

        String[] items = new String[] {"Foo","Bar", "Fizz", "Bin"};
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.reminder_row, R.id.text1, items);

        setListAdapter(adapter);

        registerForContextMenu(getListView());
    }

    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {
        super.onListItemClick(l, v, position, id);
        Intent i = new Intent(this, ReminderEditActivity.class);
        i.putExtra("RowId", id);
        startActivity(i);
    }

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        super.onCreateOptionsMenu(menu);
        MenuInflater mi = getMenuInflater();
        mi.inflate(R.menu.list_menu, menu);
        Log.d("ReminderListActivity","Why is there no menu?");
        return true;
    }
}

解决方案

onCreateOptionsMenu() is called when activity created .We dont need to call it explicitly. Check whether your activity has title bar or not.If dont then make it visible or remove no title bar property in activity.Try it may it work.

这篇关于理解为什么onCreateOptionsMenu不显示菜单的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆