在每个刷卡片段不同的动作条项刷卡视图 [英] Swipe view with different actionbar items in each swipe fragment

查看:132
本文介绍了在每个刷卡片段不同的动作条项刷卡视图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我要改变每刷卡片段上的动作条的项目。其实我想提交动作条按钮,只有第三刷卡片段。例如,我有3个片段刷卡所有,急了,新的我只希望提交一份关于新的片段按钮。我尝试了一些code。这里是:

 公共布尔onCreateOptionsMenu(菜单菜单)
{
//添加您的刷新按钮RES /菜单/ main.xml中
。getMenuInflater()膨胀(R.menu.main,菜单);
mRefreshMenuItem = menu.findItem(R.id.action_submit);

返回true;
}
 

和在页面中选择我这样做。但它不正常使用。

  @覆盖
     公共无效onPageSelected(INT位置){

       actionBar.setSelectedNavigationItem(位置);
       如果(TabItem.equal(ALL){
        mRefreshMenuItem.setVisible(假);
       }如果(TabItem.equals(紧急)){
        mRefreshMenuItem.setVisible(真正的);
        }如果(TabItem.equals(NEW)){
        mRefreshMenuItem.setVisible(假);
        }

     }
 

解决方案

在你的viewpager容器(活动或片段),加上下一行的页面变化监听器:

  invalidateOptionsMenu();
supportInvalidateOptionsMenu(); //如果使用的动作条支持库
。getActivity()invalidateOptionsMenu(); //如果viewpager容器是一个片段
 

这将是这样的:

  @覆盖
公共无效的onCreate(包savedInstanceState){
    super.onCreate(savedInstanceState);
    ...
    yourViewPager.setOnPageChangeListener(新ViewPager.SimpleOnPageChangeListener(){
        @覆盖
        公共无效onPageSelected(INT位置){
            invalidateOptionsMenu();
        }
    });
}
 

然后创建您的 onCreateOptionsMenu()。菜单布局都将有所有你想要显示的不同的图标:

  @覆盖
公共无效onCreateOptionsMenu(功能菜单,MenuInflater充气){
    super.onCreateOptionsMenu(菜单,充气);
    inflater.inflate(R.menu.your_menu_layout,菜单);

}
 

在prepareOptionsMenu()回调方法被调用菜单显示之前,我们将使用它来使菜单项可见取决于当前片段上:

  @覆盖
公共布尔prepareOptionsMenu(功能菜单)在{
    super.on prepareOptionsMenu(菜单);
    INT页= yourViewPager.getCurrentItem();
    开关(页){
        情况下0:
            menu.findItem(R.id.item_f1).setVisible(真正的);
            menu.findItem(R.id.item_f2).setVisible(假);
            menu.findItem(R.id.item_f3).setVisible(假);
            打破;
        情况1:
            menu.findItem(R.id.item_f1).setVisible(假);
            menu.findItem(R.id.item_f2).setVisible(真正的);
            menu.findItem(R.id.item_f3).setVisible(假);
            打破;
        案例2:
            menu.findItem(R.id.item_f1).setVisible(假);
            menu.findItem(R.id.item_f2).setVisible(假);
            menu.findItem(R.id.item_f3).setVisible(真正的);
            打破;
    }
    返回true;
}
 

,就是这样。

如果您viewpager容器是一个片段,添加 setHasOptionsMenu(真),如果它是一个活动是没有必要的。

I want to change the actionbar items on each swipe fragment. Actually I want submit button on actionbar for only third swipe fragment. For example I have 3 fragment in swipe "all,urgent,new" and I only want submit button on "new" fragment. I tried some code. here is it:

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;
}

And on Page selected I done so. But It is not working perfectly.

  @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);
        }

     }

解决方案

In your viewpager container (Activity or Fragment), add the next line in your page change listener:

invalidateOptionsMenu();
supportInvalidateOptionsMenu();//if using the actionbar support library
getActivity().invalidateOptionsMenu();//if your viewpager container is a fragment

it would be something like this:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ...
    yourViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
        @Override
        public void onPageSelected(int position) {
            invalidateOptionsMenu();
        }
    });
}

Then create your onCreateOptionsMenu(). The menu layout is going to have all the different icons you want to show:

    @Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    super.onCreateOptionsMenu(menu, inflater);
    inflater.inflate(R.menu.your_menu_layout, menu);

}

The onPrepareOptionsMenu() callback method is called before the menu is shown, and we are going to use it to make the menu items visible depending on the current fragment:

    @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;
}

and that's it.

If your viewpager container is a fragment, add setHasOptionsMenu(true), if it is an activity is not necessary.

这篇关于在每个刷卡片段不同的动作条项刷卡视图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆