Чтобы понять эту статью, вам нужно знать, что фрагмент — это компонент многократного использования, у него есть файл компоновки, который декларирует его пользовательский интерфейс и другие основные вещи. Я покажу вам, как использовать его с первого принципа.
Создание фрагментов
Все фрагменты должны иметь публичный конструктор без параметров (я буду называть его ‘public no-arg constructor’). Если вы создадите класс фрагмента без конструктора, вы получите исключение во время выполнения. Java автоматически генерирует конструктор public no-arg во время выполнения, если в классе нет других конструкторов, но если вы объявите в классе другой конструктор, вам придется объявить конструктор public no-arg самостоятельно.
У фрагментов есть метод onCreateView()
. В этом методе происходит раздувание макета фрагмента. Подпись и тело метода обычно выглядят следующим образом:
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.<layoutFileName>,container, false);
}
Разбивка кода
Мы видим, что метод принимает три аргумента — экземпляр LayoutInflater
, используемый для раздувания или привязки нужного вам макета к компоненту, ViewGroup
, представляющий часть макета активности, на которую будет раздуваться фрагмент, и Bundle
для сохранения состояния экземпляра.
Внутри тела метода LayoutInflater вызывает свой метод inflate()
. Его метод inflate принимает 3 аргумента:
- Макет, который вы хотите раздуть
ViewGroup
, переданный вonCeateView()
- булево значение
attachToRoot
.
В итоге, объект LayoutInflater создает объект View
, а метод onCreateView
возвращает созданный View
.
Добавление фрагмента в деятельность
Чтобы добавить фрагмент в макет активности, мы добавляем тег <fragment/>
в xml-файл макета активности. Свойство name тега fragment должно быть полным именем класса фрагмента, который мы хотим связать с макетом.
<fragment
android:name="com.example.demoapp.ExampleFragment"
android:layout_width="match_parent" />
Приведенный выше код предполагает, что мы создаем приложение с именем пакета com.example.demoapp и что имя класса фрагмента будет либо ExampleFragment.java, либо ExampleFragment.kt.
Вы можете применить другие обычные xml свойства к вашему тегу <fragment/>
. Если в вашей деятельности нет других представлений, ваш фрагмент может быть ее корневым макетом.
Далее: Получение взаимодействия между активностью и фрагментом