每当在选项卡之间导航时启用ActionBar按钮。

3
我有一个主活动,其中我使用三个片段来指定选项卡。在 ActionBar 上有一个按钮,导航到另一个片段,比如“关于应用程序的信息”。一旦用户导航到这个特定的片段(Info),我会将其禁用,以便不会反复调用。然后在主活动中按返回键时重新启用它。到目前为止都很好。但是我无法重新启用它进行一种情况:假设用户导航到信息片段但没有按返回键,但是如果他导航到其他选项卡,信息按钮仍然被禁用,因为还没有调用返回键。我尝试了很多事情,在 onStart() 和 onResume() 中的片段中,但我无法在其中引用 menuItem,因为我得到了空指针。
代码参考:(MainActivity 在 onOptionsSelected 中调用 Info 片段):
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();
    }

提醒、通知和联系人片段是否属于信息操作栏按钮下?即这些是信息按钮的一部分。 - mrsus
Info是一个完全不同的片段,可以从任何一个片段中进行导航,这种导航不会打开不同的意图,而只是从三个片段标签中的任何一个导航到相同的视图。也就是说,它会在不挂起选项卡的情况下显示出来。 - Skynet
如果可以的话,为什么不尝试在switch-case内设置default: mMenuItem.setEnabled(true);呢? - mrsus
不行,刚试了一下,我觉得永远不会有默认情况。 - Skynet
我需要在每个 fragment 的 onStart 和 onResume 中以某种方式引用 mMenuItem.. 我认为这是唯一的解决方法。 - Skynet
1个回答

2
解决方法非常简单,为各个“片段”设置选项菜单,使用以下代码: ```` setHasOptionsMenu(true); ```` 请注意,此代码应在每个片段的onCreate()方法中调用。
setHasOptionsMenu(true);

欢呼!!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接