onCreateOptionsMenu()没有在FragmentActivity上调用

时间:2016-01-27 22:49:31

标签: android menu

同事,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()被叫的原因是什么?我错过了什么?

3 个答案:

答案 0 :(得分:2)

仔细检查您是否确实将应用主题设置为Holo.Light。我无法解释导致问题的原因,但我能够重现它。在尝试FragmentActivityAppCompatActivity之间的更改后,我意外地使用FragmentActivity并将主题设置为Theme.AppCompat.Light。这创建了您所看到的行为,未调用onCreateOptionsMenu()

作为一个附带问题,您应该修复onCreateOptionsMenu()来调用super,如documentation中所述:“派生类应该始终调用基础实现”。

答案 1 :(得分:1)

尝试:

setHasOptionsMenu();//call it from onCreate(); or onViewCreated();

此方法仅在片段中用于告诉活动该片段具有选项菜单。

答案 2 :(得分:-1)

添加setHasOptionsMenu(true);在你的onCreate()方法中。