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



Download 3,69 Mb.
Pdf ko'rish
bet183/228
Sana21.07.2022
Hajmi3,69 Mb.
#834838
1   ...   179   180   181   182   183   184   185   186   ...   228
Bog'liq
Нативная разработка мобильных приложений

адаптером
. Шаблон «Адаптер» широко используется 
в Android в сочетании, например, с 
ViewPager

Spinner

Gallery
и многими дру
-
гими; конкретный класс 
Adapter
, используемый представлением 
ReyclderView
, – 
это 
RecyclerView.Adapter
.
Класс 
Adapter
реализует несколько контрактов. Сначала мы продемонстри
-
руем действующий пример с массивом 
Book.SAMPLE_DATA
в качестве источника 
данных, а затем углубимся в реализации конкретных методов:
Java
public class BrowseBooksAdapter 
extends RecyclerView.Adapter {
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new ViewHolder(new TextView(parent.getContext()));
}


Заполнение представления списка 

281
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.mTextView.setText(Book.SAMPLE_DATA[position].getTitle());
}
@Override
public int getItemCount() {
return Book.SAMPLE_DATA.length;
}
public static class ViewHolder extends RecyclerView.ViewHolder {
private TextView mTextView;
public ViewHolder(@NonNull View itemView) {
super(itemView);
mTextView = (TextView) itemView;
}
}
}
Kotlin
class BrowseBooksAdapter() : 
RecyclerView.Adapter() {
override fun onCreateViewHolder(parent: ViewGroup, 
viewType: Int): ViewHolder {
return ViewHolder(TextView(parent.context))
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val book = Book.SAMPLE_DATA[position]
holder.textView.text = book.title
}
override fun getItemCount(): Int {
return Book.SAMPLE_DATA.size
}
class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
val textView: TextView = itemView as TextView
}
}
Если этот код кажется вам запутанным и непрозрачным, то вы правы! Фак
-
тически идея 
RecyclerView
изначально была просто 
соглашением
. Мы (разработ
-
чики Android) использовали раньше виджет 
ListView
, но со временем пришли 
к выводу, что использование определенных шаблонов позволяет экономить 
память и увеличивать производительность. Без шаблона повторного исполь
-
зования элементов списка простой поиск, возвращающий несколько тысяч 
элементов, легко мог бы потребить больше ресурсов, чем доступно приложе
-
нию, особенно на устройствах, выпускавшихся в то время.
Когда класс 
RecyclerView
был включен в библиотеку поддержки (до того, как 
мы начали использовать современный пакет 
androidx
), это соглашение приоб
-
рело осязаемое воплощение в коде, но без понимания исторических предпо
-
сылок некоторые из этих шаблонов и контрактов выглядят малопонятными 
и непрозрачными!


282

Вывод списка с данными
В любом случае, в настоящее время в Android имеется проверенный и вы
-
сокопроизводительный виджет, поэтому потратим немного времени на его 
изучение. Начнем с самого низа – статического класса 
ViewHolder
. Суперкласс 
RecyclerView.ViewHolder
является абстрактным, поэтому, даже когда не требуется 
расширять его поведение, вам все равно придется определить его подкласс. 
Если бы суперкласс не был абстрактным, мы могли бы просто привести эле
-
мент 
itemView
к типу 
TextView
в методе 
onBindViewHolder
без определения своего 
подкласса. Кажется, мы сделали слишком большой шаг! Давайте отступим не
-
много назад и пойдем медленнее.
В самом простом случае 
ViewHolder
– это просто пакет ссылок на экземпля
-
ры 
View
дочерних представлений. Например, если в каждом элементе вашего 
списка имеется 
ImageView
для отображения миниатюрного изображения, 
Tex­
tView
для обозначения заголовка и еще один 
TextView
для отображения списка 
авторов книги, экземпляр 
ViewHolder
будет включать ссылки на эти три пред
-
ставления, как показано ниже:
Java
public static class ViewHolder extends RecyclerView.ViewHolder {
private ImageView mThumbnailView;
private TextView mTitleView;
private TextView mAuthorsView;
public ViewHolder(@NonNull View itemView) {
super(itemView);
mThumbnailView = itemView.findViewById(R.id.row_thumb);
mTitleView = itemView.findViewById(R.id.row_title);
mAuthorsView = itemView.findViewById(R.id.row_authors);
}
}
Kotlin
class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
val thumbnailView: ImageView = itemView.findViewById(R.id.row_thumb)
val titleView: TextView = itemView.findViewById(R.id.row_title)
val authorsView: TextView = itemView.findViewById(R.id.row_authors)
}
У вас может возникнуть справедливый вопрос: откуда берутся эти экземпля
-
ры 
View
? Отложим на время 
ViewHolder
и обратимся к методу 
onCreateViewHolder

В предыдущем примере мы просто передаем 
TextView
конструктору, но в более 
сложном пользовательском интерфейсе, например в котором мы использова
-
ли для объяснения 
ViewHolder
, нужно создать дерево представлений, которое 
можно определить в макете XML. Каждый элемент списка, например, может 
выглядеть так:

xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">


Заполнение представления списка 

283
android:id="@+id/row_thumb"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
android:orientation="vertical"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content">
android:id="@+id/row_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
android:id="@+id/row_authors"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />


Обратите внимание на трюк с атрибутом 
weight
в 
LinearLayout
, упоминав
-
шийся в главе 2.
Сохраните этот листинг в файле 

Download 3,69 Mb.

Do'stlaringiz bilan baham:
1   ...   179   180   181   182   183   184   185   186   ...   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