Gau*_*ora 55 android actionbarsherlock android-fragmentactivity
我有一个Sherlock片段活动,其中有3个片段.
片段A,片段B,片段C是三个片段.我想仅在片段B中显示完成选项菜单.
并且活动以片段A开始.当选择片段B时,添加完成按钮.
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
if(!menusInflated){
inflater.inflate(R.menu.security, menu);
menusInflated=true;
}
super.onCreateOptionsMenu(menu, inflater);
}
Run Code Online (Sandbox Code Playgroud)
当我再次启动Fragment AI想要选项菜单DONE(在片段B中设置)为此我就是这样做的
setHasOptionsMenu(false);
MenuItem item = (MenuItem) menu.findItem(R.id.done_item);
item.setVisible(false);
Run Code Online (Sandbox Code Playgroud)
但是这根本就没有隐藏,如果首次使用Fragment A启动Activity,它也会给出NullPointerException.
请告诉我这是什么问题.
Sil*_*uti 94
试试这个...
您不需要再次覆盖Fragment类中的onCreateOptionsMenu().可以通过覆盖Fragment类中提供的onPrepareOptionsMenu()方法来更改菜单项可见性.
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
@Override
public void onPrepareOptionsMenu(Menu menu) {
menu.findItem(R.id.action_search).setVisible(false);
super.onPrepareOptionsMenu(menu);
}
Run Code Online (Sandbox Code Playgroud)
C0D*_*OU5 71
这是这样做的一种方式:
在菜单中添加"组":
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<group
android:id="@+id/main_menu_group">
<item android:id="@+id/done_item"
android:title="..."
android:icon="..."
android:showAsAction="..."/>
</group>
</menu>
Run Code Online (Sandbox Code Playgroud)
然后,添加一个
Menu menu;
Run Code Online (Sandbox Code Playgroud)
变量到您的活动并在您的onCreateOptionsMenu覆盖中设置它:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
this.menu = menu;
// inflate your menu here
}
Run Code Online (Sandbox Code Playgroud)
之后,当您要显示/隐藏菜单时,将此功能添加到您的活动中:
public void showOverflowMenu(boolean showMenu){
if(menu == null)
return;
menu.setGroupVisible(R.id.main_menu_group, showMenu);
}
Run Code Online (Sandbox Code Playgroud)
我并不是说这是最好的/唯一的方式,但它对我来说效果很好.
ojo*_*ifu 20
要在仅需要它们的片段的ActionBar中显示操作项(操作按钮),请执行以下操作:
假设您希望save按钮仅显示在您接受项目输入的片段中,而不是在您查看项目列表的片段中,请将其添加到OnCreateOptionsMenu您查看项目的片段的方法中:
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
if (menu != null) {
menu.findItem(R.id.action_save_item).setVisible(false);
}
}
Run Code Online (Sandbox Code Playgroud)
注意:要使其工作,您需要onCreate()片段中的方法(您要隐藏项目按钮,我们示例中的项目视图片段)并添加setHasOptionsMenu(true)如下:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
Run Code Online (Sandbox Code Playgroud)
可能不是最好的选择,但它的工作原理很简单.
这肯定会起作用我猜...
// Declare
Menu menu;
MenuItem menuDoneItem;
// Then in your onCreateOptionMenu() method write the following...
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
this.menu=menu;
inflater.inflate(R.menu.secutity, menu);
}
// In your onOptionItemSelected() method write the following...
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.done_item:
this.menuDoneItem=item;
someOperation();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
// Now Making invisible any menu item...
public void menuInvisible(){
setHasOptionsMenu(true);// Take part in populating the action bar menu
menuDoneItem=(MenuItem)menu.findItem(R.id.done_item);
menuRefresh.setVisible(false); // make true to make the menu item visible.
}
//Use the above method whenever you need to make your menu item visible or invisiable
Run Code Online (Sandbox Code Playgroud)
MenuItem Import = menu.findItem(R.id.Import);
Import.setVisible(false)
Run Code Online (Sandbox Code Playgroud)
有关更多参考,请参阅:http://androiddhina.blogspot.in/2015/05/android-how-to-hide-menu-item-in.html
| 归档时间: |
|
| 查看次数: |
96453 次 |
| 最近记录: |