【问题标题】:Swipe view with different actionbar items in each swipe fragment在每个滑动片段中使用不同的操作栏项目滑动视图
【发布时间】:2014-05-24 02:44:21
【问题描述】:

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

     }

【问题讨论】:

  • 请建议..怎么办??
  • This 可能有助于理解。您必须借助片段“new”中调用的setHasOptionsMenu() 来更改菜单项的可见性。

标签: android android-fragments android-actionbar


【解决方案1】:

在您的 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),如果是活动则不需要。

【讨论】:

  • 感谢您的回答..我需要一点帮助..请让我确切知道如何使用它,因为我不擅长使用碎片
  • @ILovemyPoncho..我有一个设计问题..你能帮我解决一下吗
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多