Search code examples
javascriptandroidandroid-fragmentsnavigation-drawerpagerslidingtabstrip

How to link each tabs to Navigation Drawer?


As I'm new to android I got a small problem where I actually do not know how to do it. Actually I'm looking for a Navigation Drawer menus to link to each tabs. eg: swipe tabs as 'tab1', 'tab2' and 'tab3' and Navigation drawer menu also listed as 'tab1', 'tab2' and ;tab3'. So, when i click 'tab2' from Navigation Drawer it should take me to 'tab2' of swipe tabs. Could someone help me out please. thanks

   
//MainActivity.java

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mContext=this;


        list=LoadingContentActivity.list;

        Toolbar toolbar= (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        final ActionBar actionar=getSupportActionBar();
        actionar.setDisplayHomeAsUpEnabled(true);
        actionar.setHomeAsUpIndicator(R.drawable.ic_menu);

        mDrawerLayout = (DrawerLayout)findViewById(R.id.drawer_layout);
        NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
        if (navigationView != null) {
            setupDrawerContent(navigationView);
        }

        ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);
        if (viewPager != null) {
            setupViewPager(viewPager);
        }

        TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
        tabLayout.setupWithViewPager(viewPager);


    }

    private void setupDrawerContent(NavigationView navigationView) {
        navigationView.setNavigationItemSelectedListener(
                new NavigationView.OnNavigationItemSelectedListener() {
                    @Override
                    public boolean onNavigationItemSelected(MenuItem menuItem) {
                        if (menuItem.getItemId() == R.id.tab_11) {
                            startActivity(new Intent(MainActivity.this, FragmentTab1.class));
                        } else if (menuItem.getItemId() == R.id.tab_22) {
                            startActivity(new Intent(MainActivity.this, FragmentTab2.class));
                        } else if (menuItem.getItemId() == R.id.tab_33) {
                            startActivity(new Intent(MainActivity.this, FragmentTab3.class));
                        }
                        return true;
                    }
                });
    }

    private void setupViewPager(ViewPager viewPager) {
        Adapter adapter = new Adapter(getSupportFragmentManager());
        adapter.addFragment(new FragmentTab1(), "CALLS");
        adapter.addFragment(new FragmentTab2(), "CHATS");
        adapter.addFragment(new FragmentTab3(), "CONTACTS");
        viewPager.setAdapter(adapter);
    }
//TabsPagerAdapter.java

public class TabsPagerAdapter extends FragmentPagerAdapter {

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

    @Override
    public Fragment getItem(int index) {

        switch (index) {
            case 0:
                return new FragmentTab1();
            case 1:
                return new FragmentTab2();
            case 2:
                return new FragmentTab3();
        }

        return null;
    }

    @Override
    public int getCount() {
        return 3;
    }

}


Solution

  • You don't have to start the same activity again, as this will cause it to be pushed into backstack. I would suggest you simply change the current fragment in ViewPager

     ViewPager mViewPager;
    
     @Override
     protected void onCreate(Bundle savedInstanceState) {
    
      //your code
    
      mViewPager = (ViewPager) findViewById(R.id.viewpager);
     }
    
     private void setupDrawerContent(NavigationView navigationView) {
        navigationView.setNavigationItemSelectedListener(
                new NavigationView.OnNavigationItemSelectedListener() {
                    @Override
                    public boolean onNavigationItemSelected(MenuItem menuItem) {
                        if (menuItem.getItemId() == R.id.tab_11) {
                            mViewPager.setCurrentItem(0);
                        } else if (menuItem.getItemId() == R.id.tab_22) {
                            mViewPager.setCurrentItem(1);
                        } else if (menuItem.getItemId() == R.id.tab_33) {
                            mViewPager.setCurrentItem(2);
                        }
                        mDrawerLayout.closeDrawers();
                        return true;
                    }
                });
    }