【问题标题】:How to link each tabs to Navigation Drawer?如何将每个选项卡链接到导航抽屉?
【发布时间】:2015-09-12 13:36:28
【问题描述】:

由于我是 android 新手,我遇到了一个小问题,我实际上不知道该怎么做。实际上我正在寻找一个导航抽屉菜单来链接到每个选项卡。例如:滑动标签为“tab1”、“tab2”和“tab3”,导航抽屉菜单也列为“tab1”、“tab2”和“tab3”。因此,当我从导航抽屉中单击“tab2”时,它应该带我进入滑动选项卡的“tab2”。有人可以帮帮我吗? 谢谢

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

}

【问题讨论】:

    标签: javascript android android-fragments navigation-drawer pagerslidingtabstrip


    【解决方案1】:

    您不必再次启动相同的活动,因为这会导致它被推入后台。我建议您只需更改 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;
                    }
                });
    }
    

    【讨论】:

    • mViewPager 错误。应该将任何内容导入 MainAcitivty,java 吗?
    • mViewPager 是 ViewPager 的一个对象。在您的代码中,ViewPager (viewPager) 对象被声明为本地的。我只是将变量设为全局变量。而且您不必导入任何其他内容。
    • 抱歉,我忘记关抽屉了。我已经更正了答案。
    • @MohammedShamshid 很高兴我能帮上忙 :)
    猜你喜欢
    • 2021-02-22
    • 2020-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多