2014-10-29 114 views
0

我有一个ViewPager对象(有两页)的活动。第一页不应该显示任何菜单。但第二个应该显示一个菜单项。膨胀Android菜单

问题是,如果我使用任何menu.xml为onCreateOptionsMenu充气菜单,一切都很好,我的意思是,当我更改ViewPager的页面时,菜单会发生变化......但我不想显示任何东西菜单在第一页。

因此,我认为不要在onCreateOptionsMenu中夸大菜单(通过这种方式,我不会在第一页显示任何菜单,当我显示第二页时我会夸大它),但如果我不在onCreateOptionsMenu中填充菜单,菜单不再显示!

这里是我的代码:

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.item_list_activity); 

    mViewPager = (ViewPager) findViewById(R.id.pager); 
    mViewPager.setAdapter(mAppSectionsPagerAdapter); 
    mViewPager 
      .setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { 
       @Override 
       public void onPageSelected(int position) { 
        if (position == 1) { 
         //Show user's menu 
         MenuInflater inflater = getMenuInflater(); 
         inflater.inflate(R.menu.configure_users_menu, mMenu); 

        } else if (position == 0) { 

         //Clear menu. Don't show nothing. 
         mMenu.clear(); 

        } 
       } 
      }); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 

    //If I don't inflate the menu here, the menu does not inflate anymore. 
    //If I inflate the menu here (with any menu), the menu works nice. 
    /*MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.configure_groups_menu, menu);*/ 

    mMenu = menu; 

    return true; 
} 

我试图用menu.clear()膨胀的菜单中onCreateOptionsMenu后,但它不工作。

非常感谢!

+0

可以膨胀的菜单资源没有任何itens。 – 2014-10-29 12:30:06

+0

不,我也试过。使用空菜单就像不要夸大它。 – kemmitorz 2014-10-29 12:32:20

+0

您可以在xml文件中定义菜单,但是,您不需要包含任何!我已经使用过很多次了。 – 2014-10-29 12:35:23

回答

2

您不应该自己给菜单充气,只能在onCreateOptionsMenu方法中执行此操作。

这是错误的:

@Override 
public void onPageSelected(int position) { 
    if (position == 1) { 
     //Show user's menu 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.configure_users_menu, mMenu); 
    } else if (position == 0) { 
     //Clear menu. Don't show nothing. 
     mMenu.clear(); 
    } 
} 

我创建了如何实现“每页菜单”一步步的指导。此方法将自动隐藏并显示菜单的每个片段(页面)。 (假设你的mAppSectionsPagerAdapter包含片段)

第1步:

不要夸大任何菜单在你的活动,但如果你做的这些菜单项将始终可见。


步骤2:

调用setHasOptionsMenu方法在片段的OnCreate与菜单

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setHasOptionsMenu(true); 
} 

步骤3:

Inflat e页面的菜单(Fragment),在代码片段中执行此操作!因为setHasOptionsMenu已被设置为true,所以只有当分页器中的分段处于激活状态时才会显示菜单。

@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    //TODO Inflate menu here! 
    super.onCreateOptionsMenu(menu, inflater); 
} 

完整的示例代码(随机google搜索):http://www.java2s.com/Code/Android/UI/Demonstrateshowfragmentscanparticipateintheoptionsmenu.htm

+0

谢谢!这是一个更好的方式来实现菜单......每天你都可以学到新东西!;) 谢谢! – kemmitorz 2014-10-29 12:49:41