user3818938
user3818938

Reputation: 97

Drawer navigation + tab navigation having too many tabs

Im trying to Combine drawer navigation and tab navigation together. I have successfully combined the 2. When i launched the app for first time, everything works fine. However, after I click on the drawer item and back to the tabs fragments, there are too many tabs added. I tried to limit the number and it did not work. Also, when I open the other fragments in the drawer item, the tabs still remains.

here's some pictures to show

when I first open the app

enter image description here

after I open the drawer

enter image description here

When I back to the first fragment again

enter image description here

Here's my code for the tabs fragment's on createview

 private ActionBar actionBar;
private String[] tabs={ "1", "2", "3","4" };
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.activity_home, container, false);
    mSectionsPagerAdapter = new SectionsPagerAdapter(
            getChildFragmentManager());

    mViewPager = (ViewPager) v.findViewById(R.id.pager);
    mViewPager.setAdapter(mSectionsPagerAdapter);
    mViewPager.setOnPageChangeListener(
            new ViewPager.SimpleOnPageChangeListener() {
                @Override
                public void onPageSelected(int position) {
                    // When swiping between pages, select the
                    // corresponding tab.
                    getActivity().getActionBar().setSelectedNavigationItem(position);
                }
            });
    actionBar=getActivity().getActionBar();
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    ActionBar.TabListener tabListener = new ActionBar.TabListener() {
        public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
            // show the given tab
            mViewPager.setCurrentItem(tab.getPosition());
        }

        public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) {
            // hide the given tab
        }

        public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) {
            // probably ignore this event
        }
    };
    for (String tab_name : tabs) {
         actionBar.addTab(actionBar.newTab().setText(tab_name)
                        .setTabListener(tabListener));
    }

    return v;
}

I think its the

actionBar.addTab(actionBar.newTab().setText(tab_name)
                        .setTabListener(tabListener));

part that makes this happened , can anyone help me how to fix it?

Upvotes: 0

Views: 221

Answers (2)

Lei Guo
Lei Guo

Reputation: 2550

The onCreateView() method will be called when a frament is attached to an Activity and its view must be created, then the code to add tabs to ActionBar will be called more than once, and this cause your problem. Since ActionBar is belongs to your Activity, not your Fragment, you'd better add tabs to it in your Activity, move the following code to your Activity should help:

private ActionBar actionBar;
private String[] tabs={ "1", "2", "3","4" };

actionBar=getActivity().getActionBar(); // remove getActivity().
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    ActionBar.TabListener tabListener = new ActionBar.TabListener() {
        public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
            // show the given tab
            // This line need to be changed, you can make a public method in 
            // your fragment which set the current item of ViewPager, and  
            // call the method in the Activity.
            mViewPager.setCurrentItem(tab.getPosition());
        }

        public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) {
            // hide the given tab
        }

        public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) {
            // probably ignore this event
        }
    };
    for (String tab_name : tabs) {
         actionBar.addTab(actionBar.newTab().setText(tab_name)
                        .setTabListener(tabListener));
    }

Upvotes: 0

Šime Tokić
Šime Tokić

Reputation: 710

You must call actionBar.removeAllTabs() before adding tabs...because you didn't call actionBar.removeAllTabs() they cummulated (4+4)...

P.S. Please don't use actionbar and navigation modes anymore..Action bar navigation modes are deprecated in Android L

Replace actionBar with toolbar, and replace tabs with the PagerTabStrip or something else...

Upvotes: 1

Related Questions