У меня есть горизонтальная ViewPager2
. На втором слайде пейджера просмотра у меня есть RecyclerView
это реализовано с бесконечной прокруткой. Я использовал endlessrecyclerviewscrollistener для реализации бесконечной прокрутки.
Однако при прокрутке вниз это RecyclerView
, это не вызывает бесконечную прокрутку. Страница 2 бесконечной прокрутки никогда не вызывается, только страница 1.
Вот мой класс с ViewPager2
:
public class BaseBottomNavigationViewActivity extends BaseActivity implements BottomNavigationView.OnNavigationItemSelectedListener {
// The number of pages in the bottom navigation view
private static final int NUM_PAGES = 5;
// The view pager
private ViewPager2 viewPager;
// The pager adapter
private FragmentStateAdapter pagerAdapter;
// The bottom navigation view
private BottomNavigationView bottomNavigationView;
private NewPostBottomSheetDialogFragment newPostModalDialog;
private RelativeLayout newPostButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
viewPager = findViewById(R.id.view_pager);
bottomNavigationView = findViewById(R.id.bottom_navigation_view);
// The number of screens to keep in memory
viewPager.setOffscreenPageLimit(5);
// Disable swiping in the view pager
viewPager.setUserInputEnabled(false);
// Set the pager adapter
pagerAdapter = new BottomNavigationViewPagerAdapter(this);
viewPager.setAdapter(pagerAdapter);
// Register the item selected listener
bottomNavigationView.setOnNavigationItemSelectedListener(this);
// Set default selection (home)
bottomNavigationView.setSelectedItemId(R.id.action_first);
}
@Override
protected int getLayoutResource() {
return R.layout.activity_base_bottom_navigation_view;
}
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.action_first:
viewPager.setCurrentItem(0, false);
break;
case R.id.action_second:
viewPager.setCurrentItem(1, false);
break;
case R.id.action_third:
return false;
case R.id.action_fourth:
viewPager.setCurrentItem(3, false);
break;
case R.id.action_fifth:
viewPager.setCurrentItem(4, false);
break;
default:
break;
}
return true;
}
private static class BottomNavigationViewPagerAdapter extends FragmentStateAdapter {
public BottomNavigationViewPagerAdapter(FragmentActivity fa) {
super(fa);
}
@Override
public Fragment createFragment(int position) {
switch (position) {
case 0:
return new FirstPageFragment();
case 1:
return new SecondPageFragment();
case 2:
return new ThirdPageFragment();
case 3:
return new FourthPageFragment();
case 4:
return new FifthPageFragment();
}
return null;
}
@Override
public int getItemCount() {
return NUM_PAGES;
}
}
}
А вот класс для второй страницы в ViewPager2
:
public class SecondPageFragment extends Fragment {
private MyAdapter myAdapter;
private LinearLayoutManager layoutManager;
private RecyclerView recyclerView;
private EndlessRecyclerViewScrollListener scrollListener;
private List<Object> objects = new ArrayList<>();
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_page_two, parent, false);
}
@Override
public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
recyclerView = view.findViewById(R.id.recycler_view);
layoutManager = new LinearLayoutManager(getContext());
recyclerView.setLayoutManager(layoutManager);
myAdapter = new MyAdapter(getContext(), layoutManager, objects);
recyclerView.setAdapter(myAdapter);
scrollListener = new EndlessRecyclerViewScrollListener(layoutManager) {
@Override
public void onLoadMore(int page, int totalItemsCount, RecyclerView view) {
getData(page);
}
};
recyclerView.addOnScrollListener(scrollListener);
}
private void getData(final int page) {
// Here I call the API to fetch the data and add them to the objects list
}
}
Почему он не вызывает страницу 2 для RecyclerView
при прокрутке в этой ситуации и что я могу сделать, чтобы исправить это?
Спасибо!