同事,MainActivity
类派生自FragmentActivity
,由于某种原因,活动的onCreateOptionsMenu()
未被调用。我有onCreate()
中的第一个断点,它被触发,而onCreateOptionsMenu()
中的第二个断点未被触发。
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;
}
}
此应用中的片段没有自己的菜单。属于该活动的一个菜单“涵盖”所有内容。
主题是Holo.Light
阻止onCreateOptionsMenu()
被叫的原因是什么?我错过了什么?
答案 0 :(得分:2)
仔细检查您是否确实将应用主题设置为Holo.Light
。我无法解释导致问题的原因,但我能够重现它。在尝试FragmentActivity
和AppCompatActivity
之间的更改后,我意外地使用FragmentActivity
并将主题设置为Theme.AppCompat.Light
。这创建了您所看到的行为,未调用onCreateOptionsMenu()
。
作为一个附带问题,您应该修复onCreateOptionsMenu()
来调用super,如documentation中所述:“派生类应该始终调用基础实现”。
答案 1 :(得分:1)
尝试:
setHasOptionsMenu();//call it from onCreate(); or onViewCreated();
此方法仅在片段中用于告诉活动该片段具有选项菜单。
答案 2 :(得分:-1)
添加setHasOptionsMenu(true);在你的onCreate()方法中。