Вы находитесь на странице: 1из 17

Создание прокручиваемых

списков посредством
RecyclerView. Свойства.
Создание и использование
xml – файлов приложения.
Item Layout.
Целью создания любого мобильного приложения является его полезность для общества,
для индивидуумов в отдельности, а также максимальная приближенность , если
понимать абстрактно, к облегчению жизни любого человека, каким видом деятельности
он бы не занимался, к облегчению ресурсо-затрат человечества в целом (включая
главный ресурс - время), должно вести к развитию, расширению возможностей людей в
различных видах деятельности, в том числе касательно отдыха, комфорта, какие-то из
видов мобильных приложений должны вести к скоординированности, слаженности
различных внутри-социальных взаимодействий в обществе.
А также программное обеспечение,
разработанное для мобильных телефонов,
как и разработанное для других видов
цифрового окружения человека, должно
быть максимально “useful”, что в своем
контексте включает и понятие “легко
применяемо”, - что, в свою очередь требует
и применения асинхронного
программирования – т.е. того пути, по
которому в настоящее время движутся
вперед в своем развитии почти все
статически типизированные языки
программирования. Именно по такому пути
совершенствования появился язык Kotlin,
который является фактически
«логическим продолжением» языка Java.
Понимание работы кода на языке Kotlin
требует понимания объектно-
ориентированного программирования на
языке Java.
Объе́ктно-ориенти́рованное программи́рование (ООП) — подход к
программированию как к моделированию информационных объектов,
решающий на новом уровне основную задачу структурного программирования:
структурирование информации с точки зрения управляемости[2], что
существенно улучшает управляемость самим процессом моделирования, что, в
свою очередь, особенно важно при реализации крупных проектов.
Управляемость для иерархических систем предполагает минимизацию
избыточности данных (аналогичную нормализации) и их целостность, поэтому
созданное удобно управляемым — будет и удобно пониматься. Таким образом,
через тактическую задачу управляемости решается стратегическая задача —
транслировать понимание задачи программистом в наиболее удобную для
дальнейшего использования форму. В программе данного курса приступим к
изучению базовых структурных элементов объектно-ориентрованного
программирования на языке Java для операционной системы Android. Эти же
базовые элементы используются языком Kotlin. Одним из таких элементов
является RecyclerView.

У данного элемента есть своя библиотека, вносимая в зависимости App, т.е.


пакет кода, дающий возможность создавать работающую модель этого
элемента.
//recyclerview
implementation "androidx.recyclerview:recyclerview:1.2.1"
//(recyclerview) For control over item selection of both touch and mouse driven selection
implementation "androidx.recyclerview:recyclerview-selection:1.2.0-alpha01"
RecyclerView – это
Представление,
которое дает
возможность
пользователю
видеть список.
Причем данный
список является
прокручиваемым,
элементы в нем
можно добавлять,
изменять, сделать
кликабельными.
Элемент RecyclerView предназначен для оптимизации работы со списками и во многом
позволяет повысить производительность по сравнению со стандартным ListView.

Для представления данных добавим в проект в ту же папку, где расположен класс


MainActivity, новый класс Java, который назовем State:

public class Consult {

private String surname; // Фамилия


private String name; // имя
private int num; // номер в сообществе консультантов

public Consult (String surname, String name, int num){

this.surname=surname;
this.name=name;
this.num=num;
}

public String getSurname() {


return this.surname;
}

public void setSurname(String surname) {


this.surname = surname;
}
public String getName() {
return this.name; Класс Consult содержит поля для
} хранения имени и краткого
профиля консультанта, а также
public void setName(String name) ссылку на ресурс изображения
{ фото консультанта. В данном
this.name = name; случае предполагается, что в
} папке res/drawable будут
располагаться файлы
public int getNum() { изображений всех
return this.num; консультанатов. В случае
} использования Бэк-энда – их
фото и данные обновляются
public void setNum(int num) { постоянно.
this.num = num;
} Допустим, мы хотим вывести список
объектов Consult с
помощью RecyclerView. Для этого
добавим в папку res/layout новый
файл list_item.xml:
Создадим в Android-Studio новый проект (Java) , -
прокручиваемый список «врачей клиники». Создадим
xml-file контейнер, реализующий разметку для всего
списка консультантов: <androidx.recyclerview.widget.RecyclerView
<androidx.constraintlayout.widget.ConstraintLayout android:id="@+id/rv_team_consultant"
android:layout_width="0dp"
xmlns:android="http://schemas.android.com/apk/res/andr android:layout_height="0dp"
oid"
xmlns:app="http://schemas.android.com/apk/res-auto" android:visibility="visible"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" app:layoutManager="androidx.recyclerview.widget.Lin
android:layout_height="match_parent"
tools:context=".ui.dashboard.ConsultAllFragment">
earLayoutManager"
<TextView
android:id="@+id/text_consult" app:layout_constraintBottom_toBottomOf="parent"
android:layout_width="match_parent" app:layout_constraintEnd_toEndOf="parent"
android:layout_height="wrap_content"
android:layout_alignParentStart="true" app:layout_constraintStart_toStartOf="parent"
android:layout_marginStart="9dp"
android:layout_marginTop="8dp" app:layout_constraintTop_toBottomOf="@id/text_con
android:background="#D2EDED"
android:text="@string/Specialists_consultation"
sult"
android:textAlignment="center" tools:listitem="@layout/item_consult_master"
android:textSize="25sp" />
android:textColor="@color/black" </androidx.constraintlayout.widget.ConstraintLayout>
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
list_item_consult.xml:
Этот файл определяет разметку для вывода одного объекта Консультанта:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="120dp"
android:background="@drawable/bg_cardview"
>

<TextView
android:id="@+id/category"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="категория с/х: "
android:textSize="12sp"
android:layout_marginStart="2dp"
android:textColor="#A8DA59"
android:layout_marginTop="@dimen/activity_vertical_margin"
/>
<TextView
android:id="@+id/kind_category"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/organic_add"
android:textSize="12sp"
android:layout_marginStart="102dp"
android:textColor="@color/black"

android:layout_marginTop="@dimen/activity_vertical_margin"
/>
<TextView
android:id="@+id/name_consultants"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/name_consultant"
android:textSize="12sp"
android:layout_marginStart="2dp"

android:layout_marginTop="@dimen/activity_vertical_mach_
margin"
android:textColor="#A8DA59"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/askeralieva"
android:textSize="12sp"
android:layout_marginStart="122dp"
android:layout_marginTop="@dimen/activity_vertical_mach_margin"/>

<ImageView
android:id="@+id/image_consultant"
android:layout_width="74dp"
android:layout_height="74dp"
android:src="@drawable/askeralieva_bakk"
android:layout_marginStart="260dp"/>

<ImageButton
android:id="@+id/btn_call_to_consultants"
android:layout_width="50dp"
android:layout_height="60dp"
android:background="@drawable/bg_telefone_btn"
android:layout_marginStart="340dp"
android:src="@drawable/ic_baseline_phone_forwarded_24"/>
</RelativeLayout>
Как и в случае с ListView, для вывода сложных объектов
в RecyclerView необходимо определить свой адаптер. Поэтому добавим в ту
же папку, где расположен класс MainActivity и Consult, новый класс Java,
который назовем ConsultAdapter:

Адаптер, который используется в RecyclerView, должен


наследоваться от абстрактного
класса RecyclerView.Adapter. Этот класс определяет три
метода:
onCreateViewHolder: возвращает объект ViewHolder,
который будет хранить данные по одному объекту State.

onBindViewHolder: выполняет привязку объекта


ViewHolder к объекту State по определенной позиции.

getItemCount: возвращает количество объектов в списке


Для хранения данных в классе адаптера определен статический класс
ViewHolder, который использует определенные в list_item.xml элементы
управления.
Для RecyclerView следует установить атрибут app:layoutManager, который указает на тип
менеджера компоновки. Менеджер компоновки представляет объект, который
представлен классом LayoutManager. По умолчанию библиотека RecyclerView
предоставляет три реализации данного менеджера:
•LinearLayoutManager: упорядочивает элементы в виде списка с одной колонкой
•GridLayoutManager: упорядочивает элементы в виде грида со столбцами и строками.
Грид может упорядочивать элементы по горизонтали (горизонтальный грид) или по
вертикали (вертикальный грид)
•StaggeredGridLayoutManager: аналогичен GridLayoutManager, однако не требует
установки для каждого элемента в строке имели одну и ту же высоту (для
вертикального грида) и одну и ту же ширину (для горизонтального грида)
Создаем , помимо класса ActivityMain, класс ConsultAdapter. В классе ConsultAdapter сначала получаем
элемент RecyclerView, создаем Adapter (владельца ViewHolder - мастера по заполнению
ящичков списка) и устанавливаем адаптер для RecyclerView.

public class ConsultAdapter (


) extends RecyclerView.Adapter <ConsultAdapter.ViewHolder> (){

private List<Consult> list = new ArrayList<>();


private int position;
private OnItemClickListener onItemClickListener;
public ConsultAdapter() { }
public ConsultAdapter(OnItemClickListener onItemClickListener) {this.onItemClickListener = onItemClickListener; }

override
public ViewHolder onCreateViewHolder( ViewGroup parent; Int viewType; ) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item_consult,parent,false)
return new ViewHolder(view)

public void onBindViewHolder(ConsultAdapter.ViewHolder holder; Int position) {


holder.onBind(list.get(position));
}
public int getItemCount() { return list.size(); }

public class ViewHolder (itemView: View) extends RecyclerView.ViewHolder(itemView) {

public void onBind (Consult consult) {

if (consult.getName() != null) {
name.setText(consult.getName());

}
}
}

После этих действий, начинаем связывать все эти имеющиеся классы с xml- файлами ( Пример из xml- файлов и
MainActivity- , Consult - классов в прикрепленном файле к данной лекции “to Lection 2a”, )

Вам также может понравиться