Java Don';无法正确使用viewPager

Java Don';无法正确使用viewPager,java,android,android-viewpager,Java,Android,Android Viewpager,对不起,我的英语不好。我在我的应用程序中有BottomNavigationView,比如在Facebook和viewPager中,可以通过滑动来搜索片段,但我在功能onPageSelected中遇到了一些问题,它总是将位置设置为4。这是主活动的代码: private static final int NUM_PAGES = 5; BottomNavigationView bottomNavigationView; ViewPager viewPager; PagerAdapter pagerAd

对不起,我的英语不好。我在我的应用程序中有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;
    }
}
}

这是应用程序的图像 然后它再次将我移动到设置。当我点击配置文件时


您需要在ViewPager onPageSelected方法的
切换框中写入
break
语句,如下所示

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

您的(第二个)switch语句需要
break
命令。非常感谢!我花了一个小时来做这件事,但我只忘了加上休息时间。@Maierlya很高兴帮助你。。。!