我有一个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.
请告诉我这是什么问题.
我有一个带有FrameLayout和菜单的ActionBar活动.当用户点击菜单项时,我用相关的新片段替换片段.但是,我看不到一种明显的方法来删除所选片段的菜单项.
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState == null) {
StudyFragment startFragment = new StudyFragment();
startFragment.setArguments(getIntent().getExtras());
getSupportFragmentManager().beginTransaction().add
(R.id.container, startFragment).commit();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
switch (id) {
case R.id.action_study:
replaceFragment((Fragment)new StudyFragment());
break;
case R.id.action_list:
replaceFragment((Fragment)new ListFragment());
break;
// etc
}
return super.onOptionsItemSelected(item);
}
private void replaceFragment(Fragment f) {
FragmentTransaction transaction =
getSupportFragmentManager().beginTransaction(); …Run Code Online (Sandbox Code Playgroud)