【发布时间】:2021-03-17 14:17:43
【问题描述】:
在bottom navigatiom bar 的帮助下,我很难找到一个很好的例子来说明如何在fragments 之间滑动。由于FragmentStatePagerAdapter 已被弃用,现在建议使用新的ViewPager2 而不是旧的ViewPager,我想在我的代码中使用ViewPager2 和FragmentStateAdapter。我找到了一个如何结合 BottomNavigationBar 和 ViewPager here 的示例,我想做类似的事情。我的代码与示例中的代码有许多相似之处,唯一的区别是我将代码放在片段而不是活动中。 Here is a picture of how my FrontendFragment display look like。我可以使用底部导航栏在视图之间切换,但我也希望能够在视图之间滑动。有人可以帮助我或至少指导我正确的方式吗?这是我的代码:
FragmentPagerAdapter 类:
public class FragmentPagerAdapter extends FragmentStateAdapter {
private static final int mFragmentCount = 5;
public FragmentPagerAdapter(@NonNull Fragment fragment) {
super(fragment);
}
@NonNull
@Override
public Fragment createFragment(int position) {
switch (position){
case 0:
return new HomeFragment();
case 1:
return new SearchFragment();
case 2:
return new AddFragment();
case 3:
return new MessageFragment();
case 4:
return new ProfileFragment();
}
return null;
}
@Override
public int getItemCount() {
return mFragmentCount;
}
}
前端片段类:
public class FrontendFragment extends Fragment implements BottomNavigationView.OnNavigationItemSelectedListener{
private BottomNavigationView mBottomNavigationView;
private ViewPager2 mViewPager2;
private FragmentPagerAdapter mFragmentPagerAdapter;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// Inflate the layout for this fragment
View v = inflater.inflate(R.layout.fragment_frontend, container, false);
loadFragment(new HomeFragment());
mBottomNavigationView = v.findViewById(R.id.bottomNavigationBar);
mBottomNavigationView.setOnNavigationItemSelectedListener(this);
return v;
}
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
Fragment selectedFragment = null;
switch (item.getItemId()) {
case R.id.home_icon:
selectedFragment = new HomeFragment();
break;
case R.id.search_icon:
selectedFragment = new SearchFragment();
break;
case R.id.add_icon:
selectedFragment = new AddFragment();
break;
case R.id.message_icon:
selectedFragment = new MessageFragment();
break;
case R.id.profile_icon:
selectedFragment = new ProfileFragment();
break;
}
return loadFragment(selectedFragment);
}
private boolean loadFragment(Fragment selectedFragment) {
if(selectedFragment != null){
MainActivity.sFm.beginTransaction().replace(R.id.relLayoutMiddle, selectedFragment).commit();
return true;
}
return false;
}
}
提前致谢!
【问题讨论】:
标签: java android android-fragments android-viewpager2