使用不同的动作栏滑动视图

时间:2015-07-11 07:54:45

标签: android android-fragments android-actionbar

目前我有每个片段的操作栏,当我滑动片段时,会出现一个新的操作栏来代替旧的操作栏。我想要做的是当我滑动时,我想要移开操作栏并将其放置一个新的操作栏。每个片段都应该有自己的操作栏。

我不确定它是否完全正确,所以我快速演示了我想要做的事情。

Action Bar Demonstration

3 个答案:

答案 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来完成,它太有限了......我已经开始制作我自己的自定义布局了。

由于我在我的操作栏中实现了很多功能,因此我最好定制自己的功能。