Найти в Дзене
Dev

Туториал по RecyclerView. Как создать RecyclerView для android на java

Чтобы создать список элементов как на фото особого труда не требуется. Не буду писать много воды, приступим сразу.

Язык программирования - java.

Создадим новый проект.

В mainactivity.xml добавим RecyclerView

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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="match_parent"
tools:context=".MainActivity"
>

<
androidx.recyclerview.widget.RecyclerView
android:id="@+id/rec_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
/>
</
androidx.constraintlayout.widget.ConstraintLayout>

В MainActivity.java создадим лист с данными и передами его адаптеру, который будет отвечать за вывод данных на экран

public class MainActivity extends AppCompatActivity {
ArrayList<ItemData>
dataArrayList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.
activity_main);

RecyclerView recyclerView = findViewById(R.id.
rec_view);

recyclerView.setLayoutManager(
new LinearLayoutManager
(
this // контекст
, RecyclerView.VERTICAL, // ориентация
false)); //reverseLayout

// Инициализируем лист
dataArrayList = new ArrayList<>();

// наполняем лист данными, передавая данные в другой метод
getAllData("Яна", "Я приду завтра", R.drawable.img);
getAllData(
"Влад", "Не знаю", R.drawable.img_1);
getAllData(
"Ксюша", "Привет", R.drawable.img_2);
getAllData(
"Амир", "Пока", R.drawable.img_3);
getAllData(
"Вика", "До скорого", R.drawable.img_4);

//создаем адаптер и передаем лист с данными через конструктор
recyclerView.setAdapter(new Adapter(dataArrayList));
}

private void getAllData(String name, String message, int image) {
// принимаем данные и наполняем лист

// можно было и не создавать класс ItemData, а передавать данные сразу в класс адаптера, но так удобнее и меньше шансов ошибиться
ItemData itemData = new ItemData();
itemData.setName(name);
itemData.setMessage(message);
itemData.setImage(image);
dataArrayList.add(itemData);
}
}

ItemData.java

public class ItemData {
String
message, name;
int image;

public String getMessage() {
return message;
}

public void setMessage(String message) {
this.message = message;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getImage() {
return image;
}

public void setImage(int image) {
this.image = image;
}
}

вот так будет выглядеть каждый отдельный элемент в RecyclerView

item.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="10dp"
>

<!-- вместо обычного ImageView можно создать ShapeableImageView, чтобы -->
<!-- картинки были круглыми
-->
<com.google.android.material.imageview.ShapeableImageView
android:id="@+id/image"
android:layout_width="110dp"
android:layout_height="110dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:shapeAppearanceOverlay="@style/imageViewRounded"
/>

<
TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintStart_toEndOf="@id/image"
app:layout_constraintTop_toTopOf="parent"
android:textSize="16sp"
android:layout_margin="10dp"
android:textStyle="bold"
/>

<
TextView
android:id="@+id/message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintStart_toEndOf="@id/image"
app:layout_constraintTop_toBottomOf="@id/name"
android:layout_margin="10dp"
android:textSize="14sp"
/>
</
androidx.constraintlayout.widget.ConstraintLayout>

Чтобы фото было круглым в styles.xml или themes.xml нужно добавить

<style name="imageViewRounded">
<
item name="cornerFamily">rounded</item>
<
item name="cornerSize">51%</item>
</
style>

Сам адаптер, который и будет отвечать за вывод данных на экран

public class Adapter extends RecyclerView.Adapter<Adapter.ItemViewHolder> {
ArrayList<ItemData>
itemData;

// передаем лист через конструктор
public Adapter(ArrayList<ItemData> itemData) {
this.itemData = itemData;
}

@NonNull
@Override
public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View layoutInflater = LayoutInflater.
from(parent.getContext())
.inflate(R.layout.
item, parent, false);
return new ItemViewHolder(layoutInflater);
}

@Override
public void onBindViewHolder(@NonNull ItemViewHolder holder, int position) {
ItemData item =
itemData.get(position);

// подставляем нужную картинку и имя и смс в каждый элемент списка
holder.image.setBackgroundResource(item.getImage());
holder.
name.setText(item.getName());
holder.
message.setText(item.getMessage());
}

@Override
public int getItemCount() {
return itemData.size();
}

class ItemViewHolder extends RecyclerView.ViewHolder {
TextView
name, message;
ImageView
image;

ItemViewHolder(View itemView) {
super(itemView);
name = itemView.findViewById(R.id.name);
message = itemView.findViewById(R.id.message);
image = itemView.findViewById(R.id.image);
}
}
}

#recyclerView

#java

#android

#android studio

#программирование

#андроид

#джава

Что-то пошло не так, и нам не удалось загрузить комментарии. Попробуйте ещё раз
Рекомендуем почитать
Коварный стандарт PCI – Как Intel втайне создала разъём PCI и изменила мир компьютеров
За последние 30 лет мир персональных компьютеров сильно изменился, и одно из самых значительных, хотя и незаметных, изменений — это совместимость. Сегодня вы вряд ли сожжёте компьютер, подключив к нему неподдерживаемый джойстик. Проще говоря, эту проблему постепенно решила стандартизация. Один из лучших примеров фундаментального стандарта — это PCI (англ. Peripheral Component Interconnect, межсоединение периферийных компонентов — стандартная шина для подключения дополнительных плат к материнской...
Voyager-1: Какая компьютерная система у него работает уже 50 лет?
Voyager-1 работает без остановки уже 50 лет, двигаясь со скоростью 10 км/с в космосе и все еще функционирует отлично, в то время как мне приходится выбрасывать мои пятилетние iPhone и ноутбуки, потому что они не могут справиться с новым программным обеспечением. Итак, Voyager-1, который находится более чем в 20 миллиардах миль от нас (почти на расстоянии одного светового дня), снова в строю после отладки кода и получения обновления программного обеспечения. Это заставило меня задуматься, какая компьютерная...
Настройки, о которых не расскажут Google. Полезные функции Android System WebView для всех смартфонов.
Странно, но всё ещё встречаются пользователи Android, которые никогда не настраивали одно из самых важных приложений - System WebView. Если кратко объяснить назначение этой программы, то она отвечает за показ всего веб-контента на экране смартфона, а значит: Этой статьёй я отвечу на вопрос о том, какие из настроек стоит включить и дам небольшие комментарии для каждого пункта. Начать стоит с того, что доступ к скрытым настройкам WebView, можно получить с помощью приложения Activity Launcher (ссылка ниже)...
Документы, вакансии и контакты