문제

I'm trying to set different MenuItems to each of my app's tabs (ActionBar Navigation Tabs). I've tried many solutions but the last seems to be the closest. When i open my app it hides my MenuItem , but when i swipe to second Fragment it doesn't show the MenuItem in spite of the fact that ive set that it has to be visible.

Do you have any idea, how to solve this?

See my code below (please check mainly the statements near notes "Here"):

public class MainActivity extends ActionBarActivity{
    ProgressBar mProgressBar;
    EditText mEditText;
    RelativeLayout mRelativeLayout;
    ProgressBar oProgressBar;
    LinearLayout mLinearLayout;
    ViewPager mPager;
    ActionBar mActionBar;
    Menu mMenu;
    Tab mTab;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Parse.initialize(this, "code", "code");

        ParseObject.registerSubclass(Animal.class);
        ParseAnalytics.trackAppOpened(getIntent());
        Log.v("Initialize", "intitalizing from Parse.com app");

        mActionBar = getSupportActionBar();
        mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

        mPager = (ViewPager) findViewById(R.id.pager);

        ViewPager.SimpleOnPageChangeListener ViewPagerListener = new ViewPager.SimpleOnPageChangeListener() {

            @Override
            public void onPageSelected(int position) {
                super.onPageSelected(position);

                mActionBar.setSelectedNavigationItem(position);
            }
        };

        FragmentManager fm = getSupportFragmentManager();
        mPager.setOnPageChangeListener(ViewPagerListener);

        ViewPagerAdapter viewpageradapter = new ViewPagerAdapter(fm);

        mPager.setAdapter(viewpageradapter);



        ActionBar.TabListener tabListener = new ActionBar.TabListener() {


            @Override
            public void onTabReselected(Tab mTab, FragmentTransaction arg1) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onTabSelected(Tab mTab, FragmentTransaction arg1) {
                 mPager.setCurrentItem(mTab.getPosition());
                 mPager.setOffscreenPageLimit(3);
                 supportInvalidateOptionsMenu();  //Here


            }

            @Override
            public void onTabUnselected(Tab mTab, FragmentTransaction arg1) {
                // TODO Auto-generated method stub
                supportInvalidateOptionsMenu();
            }
        };



        ActionBar.Tab Animals = mActionBar.newTab().setText("Animals");
        ActionBar.Tab Frag2Tab = mActionBar.newTab().setText("Favorites");
        ActionBar.Tab Frag3Tab = mActionBar.newTab().setText("Settings");


        Animals.setTabListener(tabListener);
        Frag2Tab.setTabListener(tabListener);
        Frag3Tab.setTabListener(tabListener);


        mActionBar.addTab(Animals);
        mActionBar.addTab(Frag2Tab);
        mActionBar.addTab(Frag3Tab);

    }



    @Override
     public void onDestroy(){
         System.exit(0);
     }


    @Override
public boolean onPrepareOptionsMenu(Menu menu) {

    super.onPrepareOptionsMenu(menu);
        Fragment1 frg1 = new Fragment1();
        Fragment2 frg2 = new Fragment2();
        Fragment3 frg3 = new Fragment3();


        try {
            if(frg1.isMenuVisible()){


                    menu.findItem(R.id.action_refresh).setEnabled(false) .setTitle("").setIcon(null);
                    Log.v("fdsfad", "sadfasdfsa");

                            }
            else if (frg2.isMenuVisible()){


                    menu.findItem(R.id.action_refresh).setEnabled(true) .setTitle("Refresh").setIcon(R.drawable.ic_action_refresh);
                    Log.v("fdsfad", "sadfasdfsa");

                            }

            else if (frg3.isMenuVisible()){


                menu.findItem(R.id.action_refresh).setEnabled(true) .setTitle("Refresh").setIcon(R.drawable.ic_action_refresh);
                    Log.v("fdsfad", "sadfasdfsa");

                            }

    }   catch (Exception e) {
                    e.printStackTrace();
                                            }


        return true;

}
     @Override
        public boolean onCreateOptionsMenu(Menu menu) {


            getMenuInflater().inflate(R.menu.main, menu);

            return true;
        }




         public boolean onOptionsItemSelected(MenuItem item) {
            switch (item.getItemId()) {
                case R.id.action_refresh:
                    Toast.makeText(getBaseContext(), "Pull to refresh", Toast.LENGTH_SHORT).show();

                    return true; 
                 } 
            return super.onOptionsItemSelected(item);
         }



         @Override
            public boolean onKeyDown (int keyCode, KeyEvent event) {
                if (keyCode == KeyEvent.KEYCODE_SEARCH) {
                    Toast.makeText(this, "Search button: clicked", Toast.LENGTH_SHORT).show();
                }

                return super.onKeyDown(keyCode, event);
            }




         }

Thanks in advance!

도움이 되었습니까?

해결책

If there is no more item visible, setVisible(true) will be not working.

One option is to null the icon, set empty title and disable this item. Or maybe clearing and inflating menu in onPrepareOptionsMenu again will be working well.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top