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



Download 3,69 Mb.
Pdf ko'rish
bet188/228
Sana21.07.2022
Hajmi3,69 Mb.
#834838
1   ...   184   185   186   187   188   189   190   191   ...   228
Bog'liq
Нативная разработка мобильных приложений

Java
public interface BookDataSource {
Book get(int index);
int size();
}
Kotlin
interface BookDataSource {
operator fun get(index: Int): Book
val size: Int
}
Теперь изменим адаптер, чтобы он мог принимать любой класс, реализую
-
щий этот интерфейс:


Динамические данные в представлениях списков 

293
Java
public class
BrowseBooksAdapter extends RecyclerView.Adapter {
private final BookDataSource mSource;
public BrowseBooksAdapter(BookDataSource source) {
super();
mSource = source;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new ViewHolder(new TextView(parent.getContext()));
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
Book book = mSource.get(position);
holder.textView.setText(book.getTitle());
}
@Override
public int getItemCount() {
return mSource.size();
}
public static class ViewHolder extends RecyclerView.ViewHolder {
private TextView textView;
public ViewHolder(@NonNull View itemView) {
super(itemView);
textView = (TextView) itemView;
}
}
}
Kotlin
class BrowseBooksAdapter(private val source: BookDataSource) :
RecyclerView.Adapter() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
return ViewHolder(TextView(parent.context))
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val book = source[position]
holder.textView.text = book.title
}
override fun getItemCount(): Int {
return source.size
}
class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
val textView: TextView = itemView as TextView
}
}


294

Моделирование каталога библиотеки
Ничего сложного! Если мы захотим продолжать использовать статический 
массив, можно создать простой класс, реализующий интерфейс 
BookDataSource

но использующий список, зашитый в код:
Java
public class HardCodedBookDataSource implements BookDataSource {
public Book get(int index) {
return Book.SAMPLE_DATA[index];
}
public int size() {
return Book.SAMPLE_DATA.length;
}
}
Kotlin
class HardCodedBookDataSource : BookDataSource {
override val size: Int
get() = Book.SAMPLE_DATA.size
override operator fun get(index: Int): Book {
return Book.SAMPLE_DATA[index]
}
}
Возможно, вы не заметили, но контракт, определяемый интерфейсом 
Book­
DataSource
, неявно поддерживается всеми реализациями 
List
– то есть 
предоставить источник данных можно, как показано ниже:
Java
public class Books extends ArrayList implements BookDataSource {}
Kotlin
class Books : ArrayList(), BookDataSource
Определив источник данных таким способом, вы автоматически получите 
в свое распоряжение все замечательные операции, поддерживаемые классом 
List
, такие как 
add

addAll

set

remove

subList
и т. д.
И даже притом что мы все еще используем статический список книг, нам не 
придется вносить никаких изменений в наш 
RecyclerView
или адаптер 
Browse­
BooksAdapter
, за исключением использования нового источника в адаптере, ко
-
торый может получать данные от веб-службы или читать их из локальной базы 
данных. Отлично! Наш список стал более динамичным, даже притом что ис
-
пользует те же данные, что и раньше. 
Мы продолжим подготовку к удалению статического массива книг далее 
в этой главе, а сейчас посмотрим, как то же самое реализовать в iOS.
iOS
По аналогии с реализацией шаблона «Адаптер» в Android, нам нужно создать 
некоторый промежуточный слой, отделяющий контроллер от исходных дан
-


Динамические данные в представлениях списков 

295
ных. С этой целью можно добавить новый объект, с которым будет взаимодей
-
ствовать контроллер. Как вы наверняка помните, в контроллере 
CatalogView­
Controller
мы реализовали поддержку протокола 
UITableViewDataSource
для 
передачи данных в табличное представление.
Это помогло нам на первом этапе, но почему бы не создать отдельный объ
-
ект для прямой передачи данных в табличное представление? Контроллер мог 
бы управлять этим объектом источника данных и табличным представлением. 
Так мы сможем отделить контроллер от представления – в данном случае от 
табличного представления – и слоя данных.
Добавим в проект новый файл с классом 
ListDataSource
, выбрав в меню пункт 

Download 3,69 Mb.

Do'stlaringiz bilan baham:
1   ...   184   185   186   187   188   189   190   191   ...   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