2.2 Настройка ViewPager2

Настроим ViewPager2 для листания фрагментов.

В классе MainActivity создадим внутренний приватный класс адаптера для ViewPager2.

MainActivity.java
public class MainActivity extends AppCompatActivity {

    private ViewPager2 viewPager;
    
    ...
    
    private class Adapter extends FragmentStateAdapter {

        public Adapter2(@NonNull FragmentActivity fragmentActivity) {
            super(fragmentActivity);
        }

        @NonNull
        @Override
        public Fragment createFragment(int position) {
            return null;
        }

        @Override
        public int getItemCount() {
            return 0;
        }
    }
}

Внутри класса адаптера создадим приватное поле со списком фрагментов, добавим метод для добавления фрагмента в список. Метод getItemCount() будет возвращать количество элементов в списке фрагментов, метод createFragment() будет возвращать i-ый элемент из списка.

MainActivity.java
public class MainActivity extends AppCompatActivity {

    private ViewPager2 viewPager;
    
    private class Adapter extends FragmentStateAdapter {

        private List<Fragment> list = new ArrayList<>();

        public void addFragment(Fragment fragment) {
            list.add(fragment);
        }

        public Adapter(FragmentActivity fa) {
            super(fa);
        }

        @Override
        public Fragment createFragment(int position) {
            return list.get(position);
        }

        @Override
        public int getItemCount() {
            return list.size();
        }
    }
}

Теперь получим ссылку на объект ViewPager2, создадим объекты фрагментов и добавим их в список в адаптер, после чего подключим адаптер к ViewPager2.

MainActivity.java
public class MainActivity extends AppCompatActivity {

    private ViewPager2 viewPager;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        ...
        
        viewPager = findViewById(R.id.container);

        Adapter adapter = new Adapter(this);
        adapter.addFragment(new WintersunFragment());
        adapter.addFragment(new InsomniumFragment());
        adapter.addFragment(new BelakorFragment());
        viewPager.setAdapter(adapter);
    }

    private class Adapter extends FragmentStateAdapter {
        private List<Fragment> list = new ArrayList<>();

        public void addFragment(Fragment fragment) {
            list.add(fragment);
        }

        public Adapter(FragmentActivity fa) {
            super(fa);
        }

        @Override
        public Fragment createFragment(int position) {
            return list.get(position);
        }

        @Override
        public int getItemCount() {
            return list.size();
        }
    }
}

Проверим работоспособность листания фрагментов с помощью ViewPager2.

Last updated