我有一个主要活动,在其中我使用三个片段指定选项卡。我在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);

干杯!!

09-30 14:44
查看更多