Aniruth
Aniruth

Reputation: 187

Changing activity menu when the fragment changed

I am having a MainActivity with three tabs using ViewPager and PagerSlidingTabStrip library in my android app.

The problem is how can i change the menu of MainActivity when the fragment changed(i.e. Tab changed).

Each Tab has different menu. How can i do this?

Upvotes: 0

Views: 79

Answers (2)

localhost
localhost

Reputation: 5598

You should override onCreateOptionsMenu in each fragment used in ViewPager and use menu.clear() before inflating menu resource.

You can check how to use this in this link

Attempt on "Changing menu items at runtime" chapter.

Upvotes: 2

ii7scw
ii7scw

Reputation: 361

In my case I am using 2 fragments...you're just going to add one

  1. fragment

    ...

     public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
    
    
        final View rootView = inflater.inflate(R.layout.login, container, false);
    

    ...

It connects to layout login

  1. fragment is basically the same except the layout

    ... public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.register, container, false);
    ...
    

    It connects to layout register

Then we have TabsPagerAdapter

public class TabsPagerAdapter extends FragmentPagerAdapter {

    public TabsPagerAdapter(FragmentManager fm)
    {
        super(fm);
    }

    @Override
    public Fragment getItem(int index) {

        switch (index) {
        case 0:
            // 1 fragment activity
            return new LoginFragment();
        case 1:
            // 2 fragment activity
            return new RegisterFragment();

        }

        return null;
    }

    @Override
    public int getCount() {
        // get item count - equal to number of tabs
        return 2;
    }

}

And all that you call here, in MainActivity

    public class MainActivity extends FragmentActivity implements ViewPager.OnPageChangeListener, TabHost.OnTabChangeListener,ActionBar.TabListener {

    private ViewPager mViewPager;
    private TabsPagerAdapter mAdapter;
    private TabHost mTabHost;
    private String[] tabs = { "1.Fragment", "2.Fragment"};

    private TabHost.TabContentFactory mTabFactory = new TabHost.TabContentFactory() {
        @Override
        public View createTabContent(String tag) {
            View v = new View(MainActivity.this);
            v.setMinimumHeight(0);
            v.setMinimumWidth(0);
            return v;
        }
    };

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.view_bottomtabs);
        mViewPager = (ViewPager) findViewById(R.id.viewPager);
        mViewPager.setOnPageChangeListener(this);

        mAdapter = new TabsPagerAdapter(getSupportFragmentManager());
        mViewPager.setAdapter(mAdapter);
        mTabHost = (TabHost) findViewById(android.R.id.tabhost);
        mTabHost.setup();
        mTabHost.setOnTabChangedListener(this);
        for (String tab_name : tabs){
            TabHost.TabSpec spec =mTabHost.newTabSpec(tab_name);
            spec.setIndicator(tab_name);
            spec.setContent(mTabFactory);
            mTabHost.addTab(spec);
        }

    }



    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

    }

    @Override
    public void onPageSelected(int position) {
        mTabHost.setCurrentTab(position);
    }

    @Override
    public void onPageScrollStateChanged(int state) {

    }

    @Override
    public void onTabChanged(String tabId) {
        int position = -1;
        if (tabId.contains("1.Fragment")) {
            position = 0;
        } else if (tabId.contains("2.Fragment")) {
            position = 1;
        }
        mViewPager.setCurrentItem(position);
    }

    @Override
    public void onTabReselected(Tab tab, FragmentTransaction ft) {
    }

    @Override
    public void onTabSelected(Tab tab, FragmentTransaction ft) {
        // on tab selected
        // show respected fragment view
        mViewPager.setCurrentItem(tab.getPosition());
    }

    @Override
    public void onTabUnselected(Tab tab, FragmentTransaction ft) {
    }


}

I hope this helped

Upvotes: 0

Related Questions