Android 未在FragmentActivity上调用OnCreateOptions菜单()
同事们,Android 未在FragmentActivity上调用OnCreateOptions菜单(),android,menu,Android,Menu,同事们,MainActivity类是从FragmentActivity派生的,由于某些原因,没有调用activity的onCreateOptions菜单()。我在onCreate()中有第一个断点,它被触发,而在oncreateoptions菜单()中有第二个断点,它没有被触发 import android.support.v4.app.FragmentActivity; public class MainActivity extends FragmentActivity { pri
MainActivity
类是从FragmentActivity
派生的,由于某些原因,没有调用activity的onCreateOptions菜单()
。我在onCreate()
中有第一个断点,它被触发,而在oncreateoptions菜单()
中有第二个断点,它没有被触发
import android.support.v4.app.FragmentActivity;
public class MainActivity extends FragmentActivity {
private FragmentPagerAdapter m_fragmentPagerAdapter;
private ViewPager m_viewPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Create the adapter that will return a fragment for each of the primary sections of the activity.
m_fragmentPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
// Set up the ViewPager with the sections adapter.
m_viewPager = (ViewPager) findViewById(R.id.container);
m_viewPager.setAdapter(m_fragmentPagerAdapter);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu); // Inflate the menu; this adds items to the action bar if it is present.
return true;
}
}
此应用程序中的片段没有自己的菜单。属于活动的一份菜单“涵盖”了所有内容
主题是全息。光
是什么阻止调用
onCreateOptions菜单()
?我缺少什么?添加设置选项菜单(true);在onCreate()方法中。再次检查是否已将应用程序主题设置为Holo.Light
。我无法解释问题的原因,但我能够重现它。在尝试了FragmentActivity
和AppCompatActivity
之间的更改之后,我意外地运行了FragmentActivity
,并将主题设置为theme.AppCompat.Light
。这创建了您正在看到的行为,其中未调用onCreateOptions菜单()
作为一个附带问题,您应该修复onCreateOptions菜单()
以调用super,如“派生类应始终调用基本实现”中所述。请尝试:
setHasOptionsMenu();//call it from onCreate(); or onViewCreated();
此方法仅在片段中用于告诉活动此片段有一个选项菜单。OP试图使其显示在活动中而不是片段片段活动没有设置选项菜单()
方法。是否尝试调用return super.onCreateOptions菜单(菜单);在OnCreateOptions菜单()中;?您是否尝试过扩展AppCompatActivity
?这将添加一个显示菜单的工具栏。请注意,在这种情况下,您可能必须更改主题。@George我知道我只针对较新版本的Android(从4.3开始)。据我所知,AppCompat允许旧版本的API执行新版本中引入的操作。然而,我觉得AppCompat是一个我应该可以不用的补丁。(当然,有可能我对AppCompat的历史和用途的理解不正确。)将基类更改为AppCompatActivity
确实带来了菜单。谢谢。你的直觉是,我实际上没有将应用程序主题设置为Holo.Light
,这是正确的。在这一过程中,我遇到了两个演示片段的示例。源于活动
,不使用旧式支持库。使用碎片活动
。既然Activity
似乎能够处理片段,是否总是需要使用FragmentActivity
?(我的这个应用程序将从头开始编写,我不需要支持古老的设备。)@Nickalexev:如果你不需要支持API 11之前的设备,你可以使用活动
而不是碎片活动
。根据这个数据,API小于11的设备现在约为3%。