我有一个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
,但它不起作用。
非常感谢!!
答案 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