每次在选项卡中导航时都启用ActionBar按钮。

时间:2013-12-05 06:28:38

标签: android android-fragments android-fragmentactivity

我有一个主要活动,我使用三个片段指定标签。我在ActionBar上有一个按钮导航到一个不同的片段,说“关于应用程序的信息”一旦用户导航到这个特定的片段(信息),我就禁用它,这样就不会一次又一次地调用它。然后在主活动的后退键上重新启用它。到现在为止还挺好。但我无法在一种情况下重新启用它:假设用户导航到信息片段并且没有按回,但是如果他导航到另一个选项卡,则信息按钮仍然被禁用,因为背压没有被称为。我在onStart()和onResume()片段中尝试了很多东西,但是当我得到一个空指针时,我无法在其中任何一个中引用menuItem。

代码参考:(从onOptionsSelected调用信息片段时的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;

on返回键(主要活动):

@Override
    public void onBackPressed() {
        mMenuItem.setEnabled(true);
        super.onBackPressed();
    }

1 个答案:

答案 0 :(得分:2)

解决方案非常简单,为个别“片段”使用设置选项菜单:

setHasOptionsMenu(true);

干杯!!