我有一些麻烦的选项菜单中的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