我想更改每个滑动片段上的操作栏项。实际上我只想在动作栏上提交第三个滑动片段的按钮。例如我在滑动“全部,紧急,新”中有3个片段,我只想在“新”片段上提交按钮。我尝试了一些代码。这是它:
public boolean onCreateOptionsMenu(Menu menu)
{
// add your refresh button to res/menu/main.xml
getMenuInflater().inflate(R.menu.main, menu);
mRefreshMenuItem = menu.findItem(R.id.action_submit);
return true;
}
在页面选择上我这样做了。但它并没有完美运作。
@Override
public void onPageSelected(int position) {
actionBar.setSelectedNavigationItem(position);
if(TabItem.equal("ALL"){
mRefreshMenuItem.setVisible(false);
}if(TabItem.equals("URGENT")){
mRefreshMenuItem.setVisible(true);
}if(TabItem.equals("NEW")){
mRefreshMenuItem.setVisible(false);
}
}
答案 0 :(得分:2)
在viewpager容器(Activity或Fragment)中,添加页面更改侦听器中的下一行:
invalidateOptionsMenu();
supportInvalidateOptionsMenu();//if using the actionbar support library
getActivity().invalidateOptionsMenu();//if your viewpager container is a fragment
它会是这样的:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
yourViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
invalidateOptionsMenu();
}
});
}
然后创建 onCreateOptionsMenu()。菜单布局将包含您要显示的所有不同图标:
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.your_menu_layout, menu);
}
在显示菜单之前调用 onPrepareOptionsMenu()回调方法,我们将根据当前片段使用它来显示菜单项:
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
int page = yourViewPager.getCurrentItem();
switch(page) {
case 0:
menu.findItem(R.id.item_f1).setVisible(true);
menu.findItem(R.id.item_f2).setVisible(false);
menu.findItem(R.id.item_f3).setVisible(false);
break;
case 1:
menu.findItem(R.id.item_f1).setVisible(false);
menu.findItem(R.id.item_f2).setVisible(true);
menu.findItem(R.id.item_f3).setVisible(false);
break;
case 2:
menu.findItem(R.id.item_f1).setVisible(false);
menu.findItem(R.id.item_f2).setVisible(false);
menu.findItem(R.id.item_f3).setVisible(true);
break;
}
return true;
}
就是这样。
如果您的viewpager容器是片段,请添加 setHasOptionsMenu(true),如果它不是必需的活动。