给Android菜单充气

时间:2014-10-29 11:50:49

标签: android android-actionbar android-menu

我有一个ViewPager对象的活动(有两个页面)。第一页不应显示任何菜单。但是第二个应该显示一个带有一个项目的菜单。

问题是,如果我使用任何menu.xml对onCreateOptionsMenu中的菜单进行充气,一切都很顺利,我的意思是,当我更改ViewPager的页面时,菜单会发生变化...但我不想要在第一页显示任何菜单。

所以,我认为不要在onCreateOptionsMenu中夸大菜单(通过这种方式,我不会在第一页显示任何菜单,当我显示第二页时我会膨胀它),但如果我不要让onCreateOptionsMenu中的菜单膨胀,菜单不再显示了!

这是我的代码:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.item_list_activity);

    mViewPager = (ViewPager) findViewById(R.id.pager);
    mViewPager.setAdapter(mAppSectionsPagerAdapter);
    mViewPager
            .setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
                @Override
                public void onPageSelected(int position) {
                    if (position == 1) {
                        //Show user's menu
                        MenuInflater inflater = getMenuInflater();
                        inflater.inflate(R.menu.configure_users_menu, mMenu);

                    } else if (position == 0) {

                        //Clear menu. Don't show nothing.
                        mMenu.clear();

                    }
                }
            });
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {

    //If I don't inflate the menu here, the menu does not inflate anymore.
    //If I inflate the menu here (with any menu), the menu works nice.
    /*MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.configure_groups_menu, menu);*/

    mMenu = menu;

    return true;
}

我在menu.clear()中夸大菜单后尝试使用onCreateOptionsMenu,但它不起作用。

非常感谢!!

1 个答案:

答案 0 :(得分:2)

你不应该自己夸大菜单,只能在onCreateOptionsMenu方法中这样做。

这是错的:

@Override
public void onPageSelected(int position) {
    if (position == 1) {
        //Show user's menu
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.configure_users_menu, mMenu);
    } else if (position == 0) {
        //Clear menu. Don't show nothing.
        mMenu.clear();
    }
}

我创建了一个关于如何实现“每页菜单”的分步指南。此方法将自动隐藏并显示每个片段(页面)的菜单。 (假设您的mAppSectionsPagerAdapter包含碎片)

第1步:

请勿在“活动”中为任何菜单充气,但如果这样做,则会始终显示这些菜单项。


第2步:

使用菜单

调用片段onCreate中的setHasOptionsMenu方法
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setHasOptionsMenu(true);
}

第3步:

为页面菜单(片段)充气,在片段代码中执行此操作!由于setHasOptionsMenu已设置为true,因此将显示菜单,但前提是该片段在寻呼机中处于活动状态。

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    //TODO Inflate menu here!
    super.onCreateOptionsMenu(menu, inflater);
}

完整示例代码(随机谷歌搜索):http://www.java2s.com/Code/Android/UI/Demonstrateshowfragmentscanparticipateintheoptionsmenu.htm