安卓选项菜单无法使用

3
作为问题所述,它没有起作用。当我按菜单按钮时,什么也不出现。
这是菜单活动:
public class AndroidMenuActivity extends Activity{

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.viewphoto);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // TODO Auto-generated method stub
     super.onCreateOptionsMenu(menu); 
     MenuInflater menuInflater = getMenuInflater();
     menuInflater.inflate(R.menu.menu, menu);
     return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // TODO Auto-generated method stub
    switch(item.getItemId()){
        case R.id.edit:
            Toast.makeText(getApplicationContext(), "edit selected", Toast.LENGTH_SHORT).show();
            Intent i = new Intent(getApplicationContext(), PhotoFlashActivity.class);
            startActivity(i);
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}
}

还有一个非常小的menu.xml文件

<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
    android:id="@+id/edit"
    android:title="Edit"/>   

</menu>

我不知道问题出在哪里,我查看的教程没有提到将活动添加到清单文件中,所以我不确定是否需要这样做。即使我这样做了,也不起作用。我已经尝试过清理项目,但也没有用。


嗨,@consprice我刚刚添加了与菜单相关的代码和menu.xml到我的activity中,发现它可以正常工作。也许其他地方有问题。 - Huang
你应该在清单文件中声明所有自己的活动,否则当你尝试启动该活动时,系统会抛出错误,因为系统找不到它。我刚刚使用API 7创建了一个全新的项目,并复制了所有与菜单处理相关的代码,它可以工作... - Huang
2
你是否重写了onKeyDown()或类似的方法,以便拦截菜单键消息?在这种情况下,菜单键将无法工作,因为它被禁用了。 - Huang
@Huang 我没有任何onKeyDown()或类似的方法。我所拥有的唯一方法都在问题中。 - consprice
我遇到了同样的问题。正如黄建议的那样,我重写了onkeydown()方法,但这导致了问题。 - ambit
显示剩余3条评论
6个回答

0
 setSupportActionBar(mToolbar);
 getSupportActionBar().setDisplayHomeAsUpEnabled(true);

将此添加到工具栏


这是我的第一个答案。 - Hamza khan

0

这可能不是什么大事,但如果您将您的onCreateOptionsMenu(...)重写成以下形式会发生什么:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // TODO Auto-generated method stub

     MenuInflater menuInflater = getMenuInflater();
     menuInflater.inflate(R.menu.menu, menu);
     return super.onCreateOptionsMenu(menu); 
}

完全注释掉调用super.OnCreateOptionsMenu(...)怎么样?我在一些我写的旧应用程序中看到(选项菜单已过时,已被ActionBar取代),我从来没有调用过那个方法。 - Nick
那并不太有效,事实上,最初我根本没有super.onCreateOptionsMenu()。在查看此链接http://www.coderanch.com/t/502429/Android/Mobile/Menu后添加了它。 - consprice
还有一个愚蠢的问题...你的minSdkLevel和targetSdkLevel设置为什么?此外,你正在测试哪个版本的Android操作系统?最后,你是否在你的应用程序中看到了溢出按钮?(看起来像3个垂直堆叠的点。)如果是这样,如果你点击它,你是否看到你的菜单选项? - Nick
我会在Froyo模拟器上尝试你的内容,然后回复你。如果你想贴出你的AndroidManifest.xml文件,那么可以更快速一些,但无论如何都没关系。 - Nick
确认你发布的内容可行。我认为可以肯定问题既不在AndroidMenuActivity中,也不在menu.xml中。但我仍然很想看看AndroidManifest.xml... - Nick
显示剩余5条评论

0

试试这段代码,对我来说完美地运行

main.class

public class OptionmenuActivity extends Activity {
/** Called when the activity is first created. */

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {


    MenuInflater inflater=getMenuInflater();
    inflater.inflate(R.menu.menu, menu);
    //return super.onCreateOptionsMenu(menu);

    menu.add("hello").setIcon(R.drawable.ic_launcher);
    menu.add("patel").setIcon(R.drawable.ic_launcher);
    menu.add("abc").setIcon(R.drawable.ic_launcher);
    menu.add("hello").setIcon(R.drawable.ic_launcher);
    menu.add("").setIcon(R.drawable.ic_launcher);
    menu.add("").setIcon(R.drawable.ic_launcher);

    return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch(item.getItemId())
    {
    case R.id.feeds:
        Toast msg = Toast.makeText(OptionmenuActivity.this, "feeds", Toast.LENGTH_LONG);
        msg.show();
        return true;

    case R.id.friends:
        Toast msg1 = Toast.makeText(OptionmenuActivity.this, "friends", Toast.LENGTH_LONG);
        msg1.show();
        return true;
    case R.id.about:
        Toast msg2 = Toast.makeText(OptionmenuActivity.this, "about", Toast.LENGTH_LONG);
        msg2.show();
        return true;

    case 2:

         Toast msg3 = Toast.makeText(OptionmenuActivity.this, "Menu 1", Toast.LENGTH_LONG);
            msg3.show();
            return true;

    }
    return true;
}
}

创建menu文件夹,放在res文件夹中,并在menu文件夹内创建menu.xml文件。

menu.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >

<item
    android:id="@+id/feeds"
    android:title="Feeds"
    android:icon="@drawable/ic_launcher"/>

<item
    android:id="@+id/friends"
    android:title="Friends"/>

<item
    android:id="@+id/about"
    android:title="About"/>


0
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        super.onCreateOptionsMenu(menu);        
        menuInflater.inflate(R.menu.menu, menu);
        menu.findItem(R.id.edit).setTitle("Edit");
}

你也可以尝试使用 force:

menu.findItem(R.id.edit).setVisible(true);

然后...

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch(item.getItemId()){
        case R.id.edit:
            //DO SOMETHING
            return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }

或者... 你可以在Java上创建菜单:

private static final int MENU_EDIT = 1;    
MenuItem itemconfig = menu.add(0, MENU_EDIT , 0, "Edit");
            itemconfig.setIcon(android.R.drawable.ic_menu_edit);
            itemconfig.setShowAsAction(2);

而 onOptionsItemSelected:

case: MENU_EDIT
     //DO SOMETHING
     return true;

-1

请像这样改变您的代码并检查。

     @Override
 public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
 super.onCreateOptionsMenu(menu); 
 MenuInflater menuInflater = getMenuInflater();
 menuInflater.inflate(R.menu.menu, menu);
 return true;
}

 public boolean onContextItemSelected(MenuItem item) {       
    onOptionsItemSelected(item);
    return true;
}

 @Override
 public boolean onOptionsItemSelected(MenuItem item) {
 // TODO Auto-generated method stub
  switch(item.getItemId()){
    case R.id.edit:
        Toast.makeText(getApplicationContext(), "edit selected", Toast.LENGTH_SHORT).show();
        Intent i = new Intent(getApplicationContext(), PhotoFlashActivity.class);
        startActivity(i);
        return true;
        default:
         return super.onOptionsItemSelected(item);
   }
 }
}

-1
public boolean onCreateOptionsMenu(Menu menu) {

        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.activity_custom__list_view, menu);
        return true;
    }


    public boolean onOptionsItemSelected(MenuItem item) {


                ....code......

            return super.onOptionsItemSelected(item);
   }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接