【发布时间】:2015-07-11 07:54:45
【问题描述】:
目前我为每个片段都有操作栏,当我滑动片段时,会出现一个新的操作栏来代替旧的操作栏。我想要做的是,当我滑动时,我想将操作栏滑开并放置一个新的。每个片段都应该有自己的操作栏。
我不确定它是否完全有意义,所以我快速演示了我正在尝试做的事情。
【问题讨论】:
标签: android android-fragments android-actionbar
目前我为每个片段都有操作栏,当我滑动片段时,会出现一个新的操作栏来代替旧的操作栏。我想要做的是,当我滑动时,我想将操作栏滑开并放置一个新的。每个片段都应该有自己的操作栏。
我不确定它是否完全有意义,所以我快速演示了我正在尝试做的事情。
【问题讨论】:
标签: android android-fragments android-actionbar
在您的 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
【讨论】:
您可能正在使用 AppCompat 库中的工具栏。向此工具栏添加一个视图,您可以根据 ViewPager 的位置移动该视图。要制作这样的视图,请查看this question。
您也可以尝试多个工具栏,这可能是可行的,但不支持。如果 AppCompat 库确实得到更新,这可能会导致您的应用程序崩溃。虽然看起来有可能,但根据to this question。
【讨论】:
我不认为 ActionBar 可以做到这一点,它太有限了......我刚刚开始制作我自己的自定义布局,用于我的片段。
由于我在我的操作栏中实现了很多功能,我可能最好自定义我自己的功能。
【讨论】: