我有一个主要活动,在其中我使用三个片段指定选项卡。我在actionbar上有一个按钮,它导航到一个不同的片段,当用户导航到这个特定的片段(info)时,我会禁用它,这样它就不会被一次又一次地调用。然后在主活动的back键上重新启用它。到现在为止,一直都还不错。但是我不能在一个场景中重新启用它:比如说,如果用户导航到信息片段并且没有按下back键,但是如果他导航到另一个选项卡,那么info按钮仍然被禁用,因为back press没有被调用。我在片段的onstart()和onresume()中尝试了很多东西,但是当我得到一个空指针时,我无法在其中任何一个中引用menuitem。
代码引用:(调用onoptionselected中的信息片段时的mainActivity):
public boolean onOptionsItemSelected(MenuItem item) {
mMenuItem = item;
switch (item.getItemId()) {
case R.id.info:
Tab d = getActionBar().getSelectedTab();
System.out.println(""+d.getText().toString());
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager
.beginTransaction();
String a = d.getText().toString();
if(a.equalsIgnoreCase("Reminders")){
FragmentContact fragmentcontact = new FragmentContact();
fragmentTransaction.replace(R.id.realtabcontent, fragmentcontact);
mMenuItem.setEnabled(false);
//mMenuItem.setIcon(R.drawable.btn_age_01);
}
else if(a.equalsIgnoreCase("Notifications")){
FragmentContact fragmentcontact = new FragmentContact();
fragmentTransaction.replace(R.id.realtabcontent2, fragmentcontact);
mMenuItem.setEnabled(false);
}
else if(a.equalsIgnoreCase("Contacts")){
FragmentContact fragmentcontact = new FragmentContact();
fragmentTransaction.replace(R.id.realtabcontent3, fragmentcontact);
mMenuItem.setEnabled(false);
}
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
break;
返回键(主要活动):
@Override
public void onBackPressed() {
mMenuItem.setEnabled(true);
super.onBackPressed();
}
最佳答案
解决方案非常简单,为单个“片段”设置选项菜单使用:
setHasOptionsMenu(true);
干杯!!