Search code examples
androidandroid-fragmentsnavigation-drawerandroid-tablayout

How to hide/disable TabLayouts when items on navigation drawer is clicked?


I am very new to android development and hence, I am not able to solve my problems via help from other internet resources. Using Youtube videos, I am designing an app that uses both NavigationDrawer and TabLayout, and all the TabLayout items and navigation drawer items use fragments. My problem is that when I clicked on items in navigation drawers, the app still displays TabLayout's fragments instead of displaying the fragment corresponding to the clicked item from `NavigationDrawer. Please help me with this. I have included code and even an image below. Thanks a lot.

The abovementioned image.

    public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {
    private DrawerLayout drawer;


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

        //following gives toolbar and navigation bar can be viewed by sliding L-R
        Toolbar toolbar = findViewById(R.id.toolbar_main);
        setSupportActionBar(toolbar);
        //attach sectionpageadapter to viewpager
        SectionPagerAdapter pagerAdapter = new SectionPagerAdapter(getSupportFragmentManager());
        ViewPager pager = findViewById(R.id.pager);
        pager.setAdapter(pagerAdapter);

        //attach viewpager to tablayout
        TabLayout tabLayout = findViewById(R.id.tabs);
        tabLayout.setupWithViewPager(pager);


        //following to give hamburger sign to navigation drawer
        drawer = findViewById(R.id.drawer_layout);

        //references to listen to click events on navigation views
        NavigationView navigationView = findViewById(R.id.nav_view);
        navigationView.setNavigationItemSelectedListener(this);

        //following for hamburger sign to rotate when slide from L-R
        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawer,toolbar,
                R.string.navigation_drawer_open,R.string.navigation_drawer_close);
        drawer.addDrawerListener(toggle);
        toggle.syncState();

        //below is our default fragment which will be shown on create, without any clicks
        //if statement so that it wont reload on rotation or resume of the device
        if (savedInstanceState == null) {
            getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                    new HomeFragment()).commit();
            navigationView.setCheckedItem(R.id.nav_home);
        }
    }

    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
        switch (menuItem.getItemId()){
            case R.id.nav_home:
            getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                    new HomeFragment()).commit();
            break;
            case R.id.nav_myaccount:
                getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                        new AccountFragment()).commit();
                break;
            case R.id.nav_mymessages:
                getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                        new MessageFragment()).commit();
                break;
            case R.id.nav_mysongs:
                getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                        new MySongFragment()).commit();
                break;
            case R.id.nav_mystores:
                getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                        new StoreFragment()).commit();
                break;
        }
        drawer.closeDrawer(GravityCompat.START);
        return true;
    }

    @Override
    //following for closing navagation bar instead of leaving activity immediately  when you press back button
    public void onBackPressed() {
        if(drawer.isDrawerOpen(GravityCompat.START)){
            drawer.closeDrawer(GravityCompat.START);
        }else {
            super.onBackPressed();
        }
    }
    private class SectionPagerAdapter extends FragmentPagerAdapter{
        public SectionPagerAdapter(FragmentManager fm){
            super(fm,BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
        }

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

        @NonNull
        @Override
        public Fragment getItem(int position) {
            switch (position){
                case 0:
                    return new HomeFragment();
                case 1:
                    return new FragmentArtists();
                case 2:
                    return new FragmentAlbum();
                case 3:
                    return new FragmentPlaylists();
            }
            return null;
        }

        @Nullable
        @Override
        public CharSequence getPageTitle(int position) {
            switch (position){
                case 0:
                    return getResources().getText(R.string.home_tab);
                case 1:
                    return getResources().getText(R.string.artist_tab);
                case 2:
                    return getResources().getText(R.string.album_tab);
                case 3:
                    return getResources().getText(R.string.playlist_tab);
            }
            return null;
        }
    }
}

Solution

  • Replace this code!

     @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
            switch (menuItem.getItemId()){
                case R.id.nav_home:
                    pager.setVisibility(View.VISIBLE);
                    tabs.setVisibility(View.VISIBLE);
                    fragmentConterner.setVisibility(View.GONE);
    
                    break;
                case R.id.nav_myaccount:
                    pager.setVisibility(View.GONE);
                    tabs.setVisibility(View.GONE);
                    fragmentConterner.setVisibility(View.VISIBLE);
                    getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                            new AccountFragment()).commit();
                    break;
                case R.id.nav_mymessages:
                    pager.setVisibility(View.GONE);
                    tabs.setVisibility(View.GONE);
                    fragmentConterner.setVisibility(View.VISIBLE);
                    getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                            new MessageFragment()).commit();
                    break;
                case R.id.nav_mysongs:
                    pager.setVisibility(View.GONE);
                    tabs.setVisibility(View.GONE);
                    fragmentConterner.setVisibility(View.VISIBLE);
                    getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                            new MySongFragment()).commit();
                    break;
                case R.id.nav_mystores:
                    pager.setVisibility(View.GONE);
                    tabs.setVisibility(View.GONE);
                    fragmentConterner.setVisibility(View.VISIBLE);
                    getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                            new StoreFragment()).commit();
                    break;
            }
            drawer.closeDrawer(GravityCompat.START);
            return true;
        }
    

    I hope it's helpful for you!