[英]Don't correctly work viewPager
對不起,我的英語不好。 我在應用程序中有BottomNavigationView,例如在Facebook和viewPager中,通過滑動來划片片段,但是在onPageSelected函數中存在一些問題,它始終將位置設置為4。這是MainActivity的代碼:
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方法的switch case
編寫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;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.