目前我有每个片段的操作栏,当我滑动片段时,会出现一个新的操作栏来代替旧的操作栏。我想要做的是当我滑动时,我想要移开操作栏并将其放置一个新的操作栏。每个片段都应该有自己的操作栏。
我不确定它是否完全正确,所以我快速演示了我想要做的事情。
答案 0 :(得分:0)
在viewpager容器(Activity或Fragment)中,添加页面更改侦听器中的下一行:
invalidateOptionsMenu();
supportInvalidateOptionsMenu();//if using the actionbar support library
getActivity().invalidateOptionsMenu();//if your viewpager container is a fragment
然后在 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),如果它是活动,则不需要。
参考 - Swipe view with different actionbar items in each swipe fragment
答案 1 :(得分:0)
您可以使用AppCompat库中的工具栏。将视图添加到此工具栏,您可以根据ViewPager的位置移动该工具栏。要制作此类视图,请选中this question。
您也可以尝试使用多个工具栏,但不支持。如果AppCompat库确实得到更新,这可能会导致您的应用程序中断。虽然看起来有可能,但根据to this question。
答案 2 :(得分:0)
我不认为这可以通过ActionBar来完成,它太有限了......我已经开始制作我自己的自定义布局了。
由于我在我的操作栏中实现了很多功能,因此我最好定制自己的功能。