0

I'm working on sample viewpager using fragment. What I want is to show the fragment menus change dynamically once I swipe from one to another. I'm using AppCompat library. I'm getting the menus, but not on actionbar. Please help me on this.

My code goes like this.

MainActivity.java

public class MainActivity extends ActionBarActivity {
    ActionBar actionBar;
    ViewPager pager;
    Tab tab;
    int selectedPage = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        actionBar = getSupportActionBar();
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

        pager = (ViewPager) findViewById(R.id.tabs);
        FragmentManager manager = getSupportFragmentManager();

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

            public void onPageSelected(int position){
                super.onPageSelected(position);
                selectedPage = position;
                actionBar.setSelectedNavigationItem(position);
            }
        };

        pager.setOnPageChangeListener(pageListener);

        PagerAdapter adapter = new PagerAdapter(manager);

        pager.setAdapter(adapter);


        TabListener tabListener = new TabListener() {

            @Override
            public void onTabUnselected(Tab tab, FragmentTransaction ft) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onTabSelected(Tab tab, FragmentTransaction ft) {
                // TODO Auto-generated method stub
                pager.setCurrentItem(tab.getPosition());
            }

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

            }
        };

        //Creating tabs
        tab = actionBar.newTab().setText("Fragment1").setTabListener(tabListener);
        actionBar.addTab(tab);

        tab = actionBar.newTab().setText("Fragment2").setTabListener(tabListener);
        actionBar.addTab(tab);
    }
}

Fragment1 and Fragment2. java

public class Fragment2 extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.activity_main, container, false);
        return view;
    }

    /* (non-Javadoc)
     * @see android.support.v4.app.Fragment#onCreateOptionsMenu(android.view.Menu, android.view.MenuInflater)
     */
    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        // TODO Auto-generated method stub
        super.onCreateOptionsMenu(menu, inflater);
        inflater.inflate(R.menu.fragment2, menu);

    }

    /* (non-Javadoc)
     * @see android.support.v4.app.Fragment#onActivityCreated(android.os.Bundle)
     */
    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onActivityCreated(savedInstanceState);
        setHasOptionsMenu(true);
    }

}
user2955143
  • 177
  • 4
  • 12

1 Answers1

0

Just give a trail by Change your method From:

@Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        // TODO Auto-generated method stub
        super.onCreateOptionsMenu(menu, inflater);
        inflater.inflate(R.menu.fragment2, menu);

    }

To:

@Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        // TODO Auto-generated method stub
        inflater.inflate(R.menu.fragment2, menu);
        super.onCreateOptionsMenu(menu, inflater);

    }

And change your item in menu.xml

<item
            android:id="@+id/something"
            android:icon="@drawable/ic"
            yourapp:showAsAction="ifRoom"
            android:title="@string/something"/>

Dont forgot to add setHasOptionsMenu(true);

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

        setHasOptionsMenu(true);

    }
Lokesh
  • 5,180
  • 4
  • 27
  • 42