我有一个带有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();
transaction.replace(R.id.container, f);
transaction.addToBackStack(null);
transaction.commit();
}
Google关于更改菜单的文档说禁用onPrepareOptionsMenu中的菜单-但是我怎么知道已选择了哪个项目?
-实施解决方案-
使用下面的Muhammed Refaat解决方案,我向班级添加了两个新成员:
private Menu activityMenu;
private MenuItem curMenuItem;
在onCreateOptionsMenu中设置它们
activityMenu = menu;
curMenuItem = activityMenu.findItem(R.id.action_study);
curMenuItem.setVisible(false);
并在onOptionsItemSelected上更改了它们
curMenuItem.setVisible(true);
curMenuItem = activityMenu.findItem(id);
curMenuItem.setVisible(false);
首先获取要删除的项目:
MenuItem item = menu.findItem(R.id.your_action);
然后设置它的可见性false
:
item.setVisible(false);
如果问题出在获取菜单上(因为它不在片段中),则可以轻松地context
从包含菜单的活动中获取a并通过它获取菜单。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句