Я сделал приложение iOS и пытаюсь сделать версию для Android.
В приложении есть «посты», которые организованы по дате. На iOS у меня есть UIPageViewController, который позволяет смахивать влево для просмотра предыдущих сообщений.
UIPageViewController просто просит предоставить контроллер представления слева и справа от текущего представления в любой данный момент. время. Это прекрасно, потому что они могут go включаться бесконечно.
Android ViewPager застрял у меня. Вместо того, чтобы запрашивать левый и правый вид, например iOS, он запрашивает общий счет - хотя у меня нет общего счета, поскольку он теоретически бесконечен.
Я попытался добавить фрагмент в начало списка всякий раз, когда ViewPager достигает «0-го» индекса, затем вызывается notifyDatasetChanged
, но он не загружает новый фрагмент, и, если я пытаюсь провести пальцем назад, он выдает Can't change tag of fragment
.
Вот соответствующие фрагменты кода:
//HomePagerAdapter.java
public class HomePagerAdapter extends FragmentPagerAdapter implements ViewPager.OnPageChangeListener {
List<HomeViewFragment> fragments = new ArrayList<>();
public HomePagerAdapter(FragmentManager fm) {
super(fm);
//Add two initially (the viewPager gets set to position 1 at the start)
fragments.add(new HomeViewFragment());
fragments.add(new HomeViewFragment());
}
@Override
public Fragment getItem(int position) {
return fragments.get(position);
}
@Override
public int getCount() {
return fragments.size();
}
public void onPageSelected(int position) {
Log.w("Debug", position + "");
if (position == 0) {
fragments.add(0, new HomeViewFragment());
notifyDataSetChanged();
}
}
}
Насколько я понимаю, это потому, что он думает, что он все еще находится в позиции 0, но на самом деле он находится в позиции 1, потому что я добавил фрагмент налево. Поэтому, когда он устанавливает страницу в положение 1, он обнаруживает, что это та же страница, на которой он уже находился, и выдает ошибку.
Каков наилучший способ сделать что-то подобное, где у меня практически бесконечный количество фрагментов, но я хочу загрузить только несколько одновременно. Более того, есть ли способ настроить его, как UIPageViewController, поэтому мне нужно только загрузить влево и вправо?