1. Понятие и назначение фрагментов

Фрагмент (класс Fragment) отвечает за внешний вид и поведение части пользовательского интерфейса в Activity (очень условно их можно сопоставить с фреймами в HTML). Фрагмент можно рассматривать как модульную часть Activity.

Разработчик может объединить несколько фрагментов в одно Activity для построения многопанельного UI и повторного использования фрагментов в нескольких Activity.

Кроме этого, фрагменты обладают динамическим поведением – их можно добавлять или удалять непосредственно во время выполнения операции.

Фрагмент всегда должен быть встроен в Activity, и на его жизненный цикл напрямую влияет жизненный цикл Activity. Например, когда Activity приостановлена, в том же состоянии находятся и все фрагменты внутри нее, а когда Activity уничтожается, уничтожаются и все фрагменты.

Фрагменты появились с версии Android 3.0 для обеспечения гибкости и динамичности UI на больших экранах (планшеты, Android TV). На большом экране существует гораздо больше возможностей для объединения и перестановки компонентов пользовательского интерфейса, что и позволяют делать фрагменты.

Существует много способов и случаев, в которых целесообразно использовать фрагменты. Опишем наиболее часто используемые.

1. Различная конфигурация фрагментов на разных устройствах и ориентациях.

Например, новостное приложение может использовать один фрагмент для показа списка статей, а другой – для отображения целой статьи. В зависимости от устройства и его ориентации, программа может вести себя по-разному:

- в портретной ориентации каждый фрагмент может находиться в своем отдельном Activity, и тогда, после нажатия на новость из списка, откроется отдельное окно со статьей;

- в ландшафтной ориентации оба фрагмента могут находиться в одном экране. Таким образом, фрагмент со списком статей может находиться в левой части экрана и при нажатии на статью, фрагмент в правой части экрана будет менять свое содержимое.

2. Создание динамического UI

Так как фрагменты являются легковесными элементами, их можно легко менять, показывать, скрывать и так далее, что позволяет нам создавать динамический пользовательский интерфейс, в котором содержимое окна может меняться по какому-то событию (нажатие на кнопку, swipe, различные жесты).

Android позволяет нам управлять несколькими фрагментами с помощью специального менеджера фрагментов, который есть в каждой Activity. С помощью этого менеджера, а также специального виджета ViewPager, можно создавать современные UI, в которых происходит динамическое переключение между фрагментами.

Использование viewPager

public class MainActivity extends AppCompatActivity implements MenuFragment.OnFragmentInteractionListener,
        DetailsFragment.OnFragmentInteractionListener {

    private FragmentManager manager;

    ViewPager pager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        manager = getSupportFragmentManager();

        pager = findViewById(R.id.pager);
        pager.setAdapter(new MyAdapter(manager));

        TabLayout tabLayout = findViewById(R.id.tabLayout);
        tabLayout.setupWithViewPager(pager);
    }

    @Override
    public void onFragmentInteraction(String result) {
    }

    class MyAdapter extends FragmentPagerAdapter {

        public MyAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public Fragment getItem(int i) {
            return DetailsFragment.newInstance(String.valueOf(i), "0");
        }

        @Override
        public int getCount() {
            return 3;
        }
    }
}

Last updated