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



Download 3,69 Mb.
Pdf ko'rish
bet170/228
Sana21.07.2022
Hajmi3,69 Mb.
#834838
1   ...   166   167   168   169   170   171   172   173   ...   228
Bog'liq
Нативная разработка мобильных приложений

Рис. 17.1 

Начальный экран
Код выглядит довольно простым, правда? Но нам нужно добавить еще кое-
что, чтобы получить требуемое нам поведение.
Итак, мы знаем, что нам понадобится выполнить некоторые операции 
с флажком и с кнопкой, поэтому получим ссылки на них с помощью метода 
findViewById
, которым обладают экземпляры 
Ac ti vi ty
и 
View
. Также добавим пе
-
ременные-члены для хранения этих ссылок. Вот как теперь должен выглядеть 
код в 
Ac ti vi ty
:


262

Вывод списка с данными
Java
public class MainAc ti vi ty extends Ac ti vi ty {
private CheckBox mTermsCheckbox;
private Button mBrowseButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTermsCheckbox = findViewById(R.id.terms_checkbox);
mBrowseButton = findViewById(R.id.browse_button);
}
}
А теперь самое интересное: предыдущая версия кода на Kotlin уже реализует 
все, что нам необходимо! Экземпляр 
TextView
в ней доступен как 
term_checkbox

а экземпляр 
Button
– как 
browse_button
, и для этого не пришлось добавлять ни 
строчки кода. Экземпляры 
Ac ti vi ty
в Kotlin, а также любых классов, реализу
-
ющих 
LayoutContainer
, будут автоматически сохранять ссылки на любые пред
-
ставления, описанные в макете, в переменные-члены с именами, соответству
-
ющими идентификаторам этих представлений. Убедитесь сами:
Kotlin
class MainAc ti vi ty : Ac ti vi ty() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
}
Отлично! Теперь у нас есть пользовательский интерфейс и ссылки в памя
-
ти на элементы пользовательского интерфейса, которые нам понадобятся. 
Вспомним, чего мы хотим добиться:
1) кнопка 
browse_button
должна запускать новый экземпляр 
Ac 
ti vi ty
, чтобы 
дать пользователю возможность исследовать содержимое библиотеки;
2) кнопка 
browse_button
должна оставаться неактивной, пока пользователь 
не установит флажок 
CheckBox
с надписью Accept Terms.
Чтобы реализовать первый пункт, нужно определить обработчик 
View.On­
ClickListener
для кнопки 
Button
. Сделать это можно несколькими способами, 
как описывалось в главе 4, посвященной пользовательскому вводу, но мы ис
-
пользуем ссылки на методы, чтобы сделать код более простым и понятным. 
Наша реализация 
View.OnClickListener
должна возвращать 
void
и принимать 
единственный параметр типа 
View
.
Взгляните:
Java
public class MainAc ti vi ty extends Ac ti vi ty {
private CheckBox mTermsCheckbox;


Оформление представлений 

263
private Button mBrowseButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTermsCheckbox = findViewById(R.id.terms_checkbox);
mBrowseButton = findViewById(R.id.browse_button);
mBrowseButton.setOnClickListener(this::browseContent);
}
private void browseContent(View view) {
Intent intent = new Intent(this, BrowseContentAc ti vi ty.class);
startAc ti vi ty(intent);
}
}
Kotlin
class MainAc ti vi ty : Ac ti vi ty() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
browse_button.setOnClickListener(::browseContent)
}
private fun browseContent(view: View) {
val intent = Intent(this, BrowseContentAc ti vi ty::class.java)
startAc 
ti 
vi 
ty(intent)
}
}
Здесь мы назначили метод 
browseContent
обработчиком события щелчка на 
кнопке. Если теперь попробовать собрать приложение, редактор связей lint сооб
-
щит об отсутствии 
BrowseContentAc ti vi ty
. Давайте исправим эту ошибку. Для этого 
создайте минимальный файл с определением подкласса 
Ac ti vi ty
, например:
Java
public class BrowseContentAc ti vi ty extends Ac ti vi ty {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
}
Kotlin
class BrowseContentAc ti vi ty : Ac ti vi ty() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
}


264

Вывод списка с данными
И не забудьте добавить его в манифест приложения!

xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/DlmlTheme">









Далее нам нужно гарантировать неактивность кнопки, пока пользователь 
не установит флажок Accept Terms. Для начала добавим атрибут 
enabled="false"
в макете XML, а затем будем изменять его в коде при изменении состояния 
CheckBox
. Для этого нам понадобится обработчик 
OnCheckChangedListener
– опре
-
делим его, снова используя ссылку на метод. Согласно контракту 
OnCheck­
ChangedListener
, метод-обработчик должен возвращать 
void
и принимать два 
параметра: экземпляр 
Button
, который может быть виджетом 
CheckBox

Switch
или аналогичным элементом пользовательского интерфейса, а также логиче
-
ское значение, определяющее состояние флажка. Метод 
onCheckChanged
, пред
-
ставленный ниже, соответствует этим критериям; свяжем его с флажком 
Check­
Box
, ссылку на который мы получили выше:
Java
public class MainAc ti vi ty extends Ac ti vi ty {
private CheckBox mTermsCheckbox;
private Button mBrowseButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTermsCheckbox = findViewById(R.id.terms_checkbox);
mTermsCheckbox.setOnCheckedChangeListener(this::onCheckChanged);
mBrowseButton = findViewById(R.id.browse_button);
mBrowseButton.setOnClickListener(this::browseContent);
}
private void onCheckChanged(Button button, boolean checked) {


Оформление представлений 

265
mBrowseButton.setEnabled(checked);
}
private void browseContent(View view) {
Intent intent = new Intent(this, BrowseContentAc ti vi ty.class);
startAc ti vi ty(intent);
}
}
Kotlin
class MainAc ti vi ty : Ac ti vi ty() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(com.oreilly.R.layout.activity_main)
browse_button.setOnClickListener(::browseContent)
terms_checkbox.setOnCheckedChangeListener(::onCheckChanged)
}
private fun browseContent(view: View) {
val intent = Intent(this, BrowseContentAc ti vi ty::class.java)
startAc 
ti 
vi 
ty(intent)
}
private fun onCheckChanged(button: Button, checked: Boolean) {
browse_button.isEnabled = checked
}
}
Если теперь снова собрать и запустить приложение, можно заметить, что 
кнопка приобрела неактивный вид и не реагирует на касания. Но если кос
-
нуться флажка (или прикрепленной к нему метки), чтобы установить его, 
кнопка изменит свой внешний вид и будет выглядеть активной, готовой среа-
гировать на касание. Если теперь коснуться кнопки, откроется новый экран 
BrowseContentAc ti vi ty
. И пусть этот экран пока пустой, но уже само его появле
-
ние наглядно показывает, что основу навигации в Android составляют взаимо
-
действия с пользователем и экземпляры 
Ac ti vi ty
.
Теперь оставим в покое Android и посмотрим, как то же самое сделать в iOS.
iOS
Чтобы упростить себе работу с приложением в будущем, первым делом нам 
следует настроить его структуру и оформление. Начнем со структуры.

Download 3,69 Mb.

Do'stlaringiz bilan baham:
1   ...   166   167   168   169   170   171   172   173   ...   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