Малко за Фрагмент

Фрагментът е модулна част от дейност, която има свой собствен жизнен цикъл и свои собствени манипулатори на събития. Android добави фрагменти с API 11, за да позволи на разработчиците да разработят по-плавни потребителски интерфейси на по-големи екрани, като екрани на таблети. Известно време по-късно беше написана библиотека, която добавя поддръжка за фрагменти към по-стари версии.

Предимствата в сравнение с използването на дейност са видими веднага:

  • С тяхна помощ можете лесно да направите дизайна адаптивен за таблети.
  • Разделянето на кода на функционални модули и следователно поддържането на кода е по-евтино

Основни класове

Има три основни класа:android.app.Fragment- всъщност от него. и нашите фрагментиandroid.app.FragmentManagerще бъдат наследени - с помощта на екземпляр от този клас се извършва цялото взаимодействие между фрагментитеandroid.app.FragmentTransaction- добре, този клас, както подсказва името, е необходим за извършване на транзакции. В момента има разновидности на класа Fragment, за решаване на определени задачи - ListFragment, PreferenceFragment и др.

Основи на фрагмента

За да създадете фрагмент, всичко, което трябва да направите, е да наследите вашия клас от Fragment. За да свържете фрагмент към конкретно маркиране, трябва да дефинирате метода onCreateView () в него. Този метод връща изгледа, към който принадлежи вашият фрагмент.

За да получите този изглед от всяко място във фрагмента, просто извикайтеgetView()

Създадохме фрагмент, но бихме искали да го поставим на екрана. За да направим това, трябва да получим екземпляр на FragmentManager и да извършим транзакцията, от която се нуждаем. Първо трябва да разберем какво можем да правим с фрагмента:add()- добавянефрагментremove()- премахва фрагментаreplace()- заменя фрагментаhide()- прави фрагмента невидимshow()- показва фрагмента

Освен това, за да добавим нашите транзакции към стека, както се случва по подразбиране с дейности, можем да използвамеaddToBackStack(String), а за да върнем предишното състояние на стека, трябва да извикаме методаpopBackStack().

Нека добавим фрагмент към екрана:

Как да свържете активност и фрагмент?

За да извикате методите на дадена дейност, е достатъчно да получите нейния екземпляр чрез методаgetActivity()

Ако трябва да обработваме фрагментни събития от дейност, тогава най-доброто решение е дейността да внедри интерфейса и във фрагмента да се опита да прехвърли родителската дейност към обекта на този интерфейс.

  • сериализиране на обект
  • предаване на обект в контейнера на Parcel чрез замяна на методите на Parcable
  • Видях някъде, че за да създадете фрагмент чрез отменен конструктор, създайте статичен фабричен метод

Ще покажа как се прави това за втората опция, тъй като за android е по-правилно да използвате Parcel за предаване на параметри между дейности и фрагменти.

Тук сме внедрили интерфейса Parcelable в класа, който искаме да предаваме между фрагментите. За да го предадете на фрагмент, направете следното:

След това просто трябва да получите обекта, който предадохме в методаonCreateView()на новия фрагмент:

UPD.поправено получаване на obj обект от gerArguments(), благодарение на firexel

Фрагментна анимация

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

За да създадете своя собствена анимация за добавяне и премахване на фрагмент? трябва да създадете два файла в директорията res/animator, единият от тях ще служи за анимиране на добавянето, а вторият за премахване

Ето пример за един от тях:

Основният елемент е objectAnimator и неговите атрибути задават параметрите на анимацията. Сега трябва да извикаме методаsetCustomAnimations()с нашите анимации и при следващата транзакция нашите фрагменти ще оживеят.

Много повече може да се каже за фрагментите, въпреки че повечето от всичко вече е написано, но исках да комбинирам всички основни знания за фрагментите, така че човек, който не знае нищо за този елемент, след като прочете, да може свободно да ги използва.