onCreateOptionsMenu不会被调用(onCreateOptionsMenu is ne

2019-07-03 15:35发布

我有一些麻烦的选项菜单中的Android工作。 我之前建立的应用程序,它们都工作得很好,但现在的菜单只是没有弹出。

代码:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);

    getMenuInflater().inflate(R.menu.activity_video, menu);
    return true;
}

整个方法从来没有所谓的(通过设置断点检查)。 该活动是超级简单,它只是有一个VideoView在里面,与OnTouchListener集。

我使用在三星Galaxy 10.1的Android 4.0.4,API等级15,minSDK 15.我这么想吗?

Answer 1:

如果测试的手机有一个菜单按钮onCreateOptionsMenu wont't上开始,主题是被称为:

android:theme="@android:style/Theme.Black.NoTitleBar"

但是,当你点击菜单按钮onCreateOptionsMenu将被调用。 我不知道在手机上发生的事情没有硬件按钮...



Answer 2:

在使用工具栏的compat的图书馆当了Android的最新版本,是很常见的,出现这种情况,为了得到的菜单项,你必须执行以下操作的工具栏中显示:

mToolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(mToolbar);
getSupportActionBar().setDisplayShowTitleEnabled(false);


Answer 3:

调用setHasOptionsMenu从功能onCreate第一。 该onCreateOptionsMenu将自动被调用。



Answer 4:

在该方法中: Fragment#onCreateView(...)你应该把:

setHasOptionsMenu(true);

然后你的方法将被调用。



Answer 5:

我有同样的问题(菜单显示不出来, onCreateOptionsMenu不会被调用)。

如果你是一个片段中调用此,你需要重写public void onCreateOptionsMenu(Menu menu, MenuInflater inflater)不是public boolean onCreateOptionsMenu(Menu menu)Fragments不使用后者,所以他们甚至不会调用它。

活动菜单

片段菜单



Answer 6:

我遇到过同样的问题。 我的问题是由不同的活动类的继承解决。

所以,我一直在做:

公共类WelcomeActivity扩展活动

但把它改为:

公共类WelcomeActivity扩展AppCompatActivity

这样,我是说,说一个动作栏可以添加到您的活动。



Answer 7:

也许你还推翻方法,并使其始终返回 返回该的keyEvent将被进一步繁殖防止真正的装置。 请参见下面的代码:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
        /*
          handling event
         */
        return true; //onCreateOptionsMenu won't be invoked.
}


Answer 8:

我也有类似的问题,而是一个不同的解决方案,我与社区共享(如我花了一小时,以了解发生了什么事):

    abstract class BaseActivity : AppCompatActivity{
      override fun onCreate(savedInstanceState: Bundle?) {
      setSupportActionBar(my_toolbar)
      }
    }
    class MyActivity : BaseActivity{
        // TODO : some good stuff
    }

其中my_toolbar是通过数据绑定在我的XML文件中创建一个对象。

这个问题看起来是一样的,没有工具栏出现,到onCreateOptionsMenu没有呼叫。

我的解决办法,以促进该代码的子类,并不适用于基本的,如作为子类是建立my_toolbar只初始化。



Answer 9:

这是因为我们的活动没有工具栏

为了补充一点。 首先,你需要添加工具栏在你activity.xml是在res /布局

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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"
    android:layout_width="match_parent"
    android:layout_height="match_parent"">

    <!-- add this part-->
    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:background="?attr/colorPrimary"
        android:minHeight="?attr/actionBarSize"
        android:theme="?attr/actionBarTheme"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</android.support.constraint.ConstraintLayout>

其次,让您的活动追加它

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

或科特林

val toolbar = findViewById<Toolbar>(R.id.toolbar)
setSupportActionBar(toolbar)


Answer 10:

试一试它的工作对我来说:---

@Override
public boolean onCreateOptionsMenu(Menu menu)
{
    super.onCreateOptionsMenu(menu);
    getMenuInflater().inflate(R.menu.home_page_menu, menu);
    return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {

    switch (item.getItemId()) {
    case R.id.menu_delete:
        Toast.makeText(this, "You pressed the Delete!",
                 Toast.LENGTH_LONG).show();
        break;


      case R.id.menu_setting:
     Intent intent=new Intent(HomePage.this,Setting.class);
     startActivity(intent);
     finish();
     Toast.makeText(this, "You pressed the Setting!",
     Toast.LENGTH_LONG).show(); break;


    }

    return super.onOptionsItemSelected(item);
}


文章来源: onCreateOptionsMenu is never called