单击导航抽屉上的项目时如何隐藏/禁用Tablayout?

问题描述 投票:-2回答:2

我对android开发非常陌生,因此我无法通过其他互联网资源的帮助来解决我的问题。使用YouTube视频,我正在设计一个同时使用导航抽屉和TabLayout的应用程序,所有TabLayout项和导航抽屉项均使用片段。我的问题是,当我单击导航抽屉中的项目时,该应用程序仍显示Tablayout的片段,而不是显示与从导航抽屉中单击的项目相对应的片段。请帮我解决一下这个。我在下面包括了代码甚至图像。非常感谢enter image description here

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;
    }
}

}图片

android android-fragments navigation-drawer android-tablayout
2个回答
0
投票

替换此代码!

 @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;
    }

希望对您有帮助!


0
投票

您已准备好将布局元素的可见性设置为可见,不可见和消失。通过编程,您可以通过

ViewPager.setVisibility(View.GONE);
TabLayout.setVisibility(View.GONE);

并且您还可以显示用于充气FrameLayout容器的FrameLayout。

FrameLayout.setVisibility(View.VISIBLE);

并且首先将FrameLayout设置为XML属性。

android:visibility="gone"

希望对您有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.