Нативная разработка мобильных приложений



Download 3,69 Mb.
Pdf ko'rish
bet22/228
Sana21.07.2022
Hajmi3,69 Mb.
#834838
1   ...   18   19   20   21   22   23   24   25   ...   228
Bog'liq
Нативная разработка мобильных приложений

25
Фрагменты
Фрагментом (класс 
Fragment
) на языке Android называется этакий облегченный 
вариант 
Ac ti vi ty
. Его можно рассматривать как 
контроллер
представления, а не 
как само представление, но он должен иметь доступ к корневому представ
-
лению (в Android роль реализации «представления» в шаблонах Model-View-
Presenter [MVP], Model-View-Controller [MVC], Model-View-ViewModel [MVVM] 
и др. выполняется классом 
View
, который обычно является атомарным визу
-
альным элементом, таким как фрагмент текста, изображение или контейнер 
для другого экземпляра 
View
; более подробно об этом рассказывается в главе 2).
Замечательной чертой 
Fragment
, отличающей этот класс от класса 
Ac ti vi ty

является возможность создавать его экземпляры напрямую, используя кон
-
структоры, конфигурации, члены и методы и т. д. Экземпляр класса 
Fragment
создается точно так же, как экземпляр любого другого класса в Java. Кроме 
того, экземпляры 
Fragment
, в отличие от 
Ac ti vi ty

могут
быть вложенными, од
-
нако исторически сложилось так, что вложенность сопряжена с некоторой не
-
надежностью, в частности в отношении вызовов методов жизненного цикла, 
но обсуждение этого вопроса выходит за рамки данной главы. В Google давно 
ведутся «жаркие споры о целесообразности использования фрагментов в An
-
droid», и в интернете можно найти массу статей по этой теме. Однако мы в сво
-
ей книге предпочитаем оставаться на нейтральных позициях в этой бессмыс
-
ленной войне взглядов.
Итак, вот как можно создать экземпляр 
Fragment
:
Java
public class MyFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.my_layout, container, false);
}
}
Kotlin
class MyFragment : Fragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle): View? {
return inflater.inflate(R.layout.my_layout, container, false)
}
}
В идеале фрагменты лучше добавлять в макеты XML, описывающие пред
-
ставления 
View
:

android:layout_width="match_parent"
android:layout_height="match_parent">
android:layout_width="200dp"
android:layout_height="match_parent" />


26

Контроллеры пользовательского интерфейса
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="match_parent" />

Однако мы снова сталкиваемся с непрозрачной процедурой создания эк
-
земпляров на системном уровне. Чтобы настроить экземпляр класса 
Fragment
программным способом, нужно создать его экземпляр с помощью ключевого 
слова 
new
и использовать 
FragmentManager
и 
FragmentTransaction
для его добавле
-
ния в существующую иерархию представления.
Кроме того, вы можете объявить свой класс, наследующий 
Fragment
, со свои-
ми параметрами, однако при повторном воссоздании экземпляра 
Fragment
аргументы его конструктора будут утеряны, поэтому разработчикам для An
-
droid предлагается использовать конструкторы без аргументов и исходить из 
предположения, что экземпляры 
Fragment
могут создаваться с помощью метода 
Class.newInstance
.
Java
Fragment fragment = new MyFragment();
Kotlin
val fragment = MyFragment()
Далее, поскольку 
Fragment
является не представлением, а скорее контролле
-
ром представления или пользовательского интерфейса, его следует настроить 
для отображения определенного представления 
View
или дерева представле
-
ний. Для хранения экземпляров 
View
, которые формируют изображение для 
Fragment
, обычно используется один пустой контейнер 
ViewGroup
, такой как 
Fra­
meLayout
.
Java
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.add(R.id.my_view_group, fragment);
transaction.commit();
Kotlin
val transaction = supportFragmentManager.beginTransaction()
transaction.add(R.id.my_view_group, fragment)
transaction.commit()
FragmentTransaction
может выполнять различные обновления для любых эк
-
земпляров 
Fragment
, на которые имеются ссылки. Вот типичная последователь
-
ность действий: открыть транзакцию, внести все необходимые изменения 
и затем подтвердить транзакцию:
Java
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
//transaction.add(R.id.my_layout, fragment);
//transaction.replace(R.id.my_layout, anotherFragment);


Android 

27
//transaction.remove(fragment);
//transaction.detach(fragment);
//transaction.attach(fragment);
//transaction.hide(fragment);
//transaction.show(fragment);
transaction.commit();
Kotlin
val transaction = supportFragmentManager.beginTransaction()
//transaction.add(R.id.my_layout, fragment)
//transaction.replace(R.id.my_layout, anotherFragment)
//transaction.remove(fragment)
//transaction.detach(fragment)
//transaction.attach(fragment)
//transaction.hide(fragment)
//transaction.show(fragment)
transaction.commit()
В отличие от 
Ac ti vi ty
, класс 
Fragment
не наследует 
Context
и поэтому не имеет 
прямого доступа ко многим API; однако экземпляры 
Fragment
имеют методы 
getContext
и 
getAc ti vi ty
, чего в большинстве случаев вполне достаточно.
На момент написания этой книги компонент 
Navigation
считался стабильным, однако 
некоторые связанные с ним возможности (например, пользовательский интерфейс 
редактора навигации – Navigation Editor UI) – нет. Существуют также некоторые 
противоречия, связанные с включением в Android перспективных инструментов 
генерации кода пользовательского интерфейса. Тем не менее компонент 
Navigation
способен обрабатывать действия фрагмента 
Fragment
, подобные предыдущим, без 
использования традиционных 
FragmentTransaction
или 
FragmentManager
.

Download 3,69 Mb.

Do'stlaringiz bilan baham:
1   ...   18   19   20   21   22   23   24   25   ...   228




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish