代码之家  ›  专栏  ›  技术社区  ›  Ilya Maier

无法正确使用viewPager

  •  0
  • Ilya Maier  · 技术社区  · 8 年前

    对不起,我的英语不好。我在我的应用程序中有BottomNavigationView,比如在Facebook和viewPager中,可以通过滑动来搜索片段,但我在功能onPageSelected中有一些问题,它总是将位置设置为4。这是主活动的代码:

    private static final int NUM_PAGES = 5;
    BottomNavigationView bottomNavigationView;
    ViewPager viewPager;
    PagerAdapter pagerAdapter;
    
    private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
            = new BottomNavigationView.OnNavigationItemSelectedListener() {
    
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {
            switch (item.getItemId()) {
                case R.id.navigation_tests:
                    viewPager.setCurrentItem(0);
                    return true;
                case R.id.navigation_courses:
                    viewPager.setCurrentItem(1);
                    return true;
                case R.id.navigation_profile:
                    viewPager.setCurrentItem(2);
                    return true;
                case R.id.navigation_leaderboard:
                    viewPager.setCurrentItem(3);
                    return true;
                case R.id.navigation_settings:
                    viewPager.setCurrentItem(4);
                    return true;
            }
            return false;
        }
    };
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        viewPager = findViewById(R.id.pager);
        pagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager());
        viewPager.setAdapter(pagerAdapter);
    
        bottomNavigationView = findViewById(R.id.navigation);
        bottomNavigationView.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);
        BottomNavigationViewHelper.disableShiftMode(bottomNavigationView);
        viewPager.setCurrentItem(2);
        bottomNavigationView.getMenu().findItem(R.id.navigation_profile).setChecked(true);
    
        viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
    
            }
    
            @Override
            public void onPageSelected(int position) {
                switch (position) {
                    case 0:
                        setTitle("Tests");
                        bottomNavigationView.setSelectedItemId(R.id.navigation_tests);
                    case 1:
                        setTitle("Courses");
                        bottomNavigationView.setSelectedItemId(R.id.navigation_courses);
                    case 2:
                        setTitle("Profile");
                        bottomNavigationView.setSelectedItemId(R.id.navigation_profile);
                    case 3:
                        setTitle("Leaderboard");
                        bottomNavigationView.setSelectedItemId(R.id.navigation_leaderboard);
                    case 4:
                        setTitle("Settings");
                        bottomNavigationView.setSelectedItemId(R.id.navigation_settings);
                }
            }
    
            @Override
            public void onPageScrollStateChanged(int state) {
    
            }
        });
    }
    
    @Override
    public void onBackPressed() {
        if (viewPager.getCurrentItem() == 2) {
            super.onBackPressed();
        } else if (viewPager.getCurrentItem() >= 3) {
            viewPager.setCurrentItem(viewPager.getCurrentItem() - 1);
        } else {
            viewPager.setCurrentItem(viewPager.getCurrentItem() + 1);
        }
    }
    
    private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {
        public ScreenSlidePagerAdapter(FragmentManager fm) {
            super(fm);
        }
    
        @Override
        public Fragment getItem(int position) {
            switch (position) {
                case 0:
                    return new FragmentTests();
                case 1:
                    return new FragmentCourses();
                case 2:
                    return new FragmentProfile();
                case 3:
                    return new FragmentLeaderboard();
                case 4:
                    return new FragmentSettings();
            }
            return null;
        }
    
        @Override
        public int getCount() {
            return NUM_PAGES;
        }
    }
    

    }

    这是应用程序的图像 然后它再次将我移动到设置。当我点击个人资料时

    1 回复  |  直到 8 年前
        1
  •  1
  •   Munir    8 年前

    你需要写 break 中的声明 switch case 的ViewPager onPageSelected方法,如下所示

         @Override
                public void onPageSelected(int position) {
                    switch (position) {
                        case 0:
                            setTitle("Tests");
                            bottomNavigationView.setSelectedItemId(R.id.navigation_tests);
                            break;
                        case 1:
                            setTitle("Courses");
                            bottomNavigationView.setSelectedItemId(R.id.navigation_courses);
                            break;
                        case 2:
                            setTitle("Profile");
                            bottomNavigationView.setSelectedItemId(R.id.navigation_profile);
                            break;
                        case 3:
                            setTitle("Leaderboard");
                            bottomNavigationView.setSelectedItemId(R.id.navigation_leaderboard);
                            break;
                        case 4:
                            setTitle("Settings");
                            bottomNavigationView.setSelectedItemId(R.id.navigation_settings);
                            break;
                    }
                }