在每个滑动片段中使用不同的操作栏项滑动视图

时间:2014-05-21 04:11:11

标签: android android-fragments android-actionbar

我想更改每个滑动片段上的操作栏项。实际上我只想在动作栏上提交第三个滑动片段的按钮。例如我在滑动“全部,紧急,新”中有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);
        }

     }

1 个答案:

答案 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),如果它不是必需的活动。