Как обновить данные адаптера RecycleView в Android?

Опубликовано: 10 Января, 2023

RecyclerView используется во многих приложениях Android для отображения списка данных в приложениях Android. Мы можем динамически добавлять или удалять данные из нашего представления ресайклера. Для обновления данных в RecyclerView мы должны использовать класс адаптера. Адаптер обрабатывает все данные в нашем представлении ресайклера. В этой статье мы рассмотрим, как обновить данные адаптера Recycler View, чтобы обновить наше представление Recycler. Пример видео приведен ниже, чтобы получить представление о том, что мы собираемся делать в этой статье.

Note: This Android article covered in both Java and Kotlin languages. 

Пошаговая реализация

Шаг 1. Создайте новый проект в Android Studio.

Чтобы создать новый проект в Android Studio, обратитесь к разделу «Как создать/запустить новый проект в Android Studio».

Шаг 2: Работа с файлом activity_main.xml

Перейдите к app > res > layout > activity_main.xml и добавьте в него приведенный ниже код. В код добавлены комментарии для более подробного ознакомления.

XML




<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/idRLContainer"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">
 
    <!--on below line we are creating our
        edit text for adding new language-->
    <EditText
        android:id="@+id/idEdtAdd"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="4dp"
        android:layout_toStartOf="@id/idBtnAdd"
        android:hint="Add item"
        android:textColorHint="@color/black" />
 
    <!--on below line we are creating a
        button to add new language-->
    <Button
        android:id="@+id/idBtnAdd"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentEnd="true"
        android:layout_margin="4dp"
        android:text="Add"
        android:textAllCaps="false" />
 
    <!--on below line we are creating a
        recycler view for displaying data-->
    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/idRVItems"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@id/idEdtAdd"
        app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />
 
</RelativeLayout>

Шаг 3: Создайте файл макета для элемента RecyclerView

Перейдите к app> res> layout> New> Layout Resource File и назовите его как lng_rv_item и добавьте к нему приведенный ниже код. В код добавлены комментарии для более подробного ознакомления.

XML




<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="4dp"
    app:cardCornerRadius="4dp"
    app:cardElevation="9dp">
 
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
 
        <!--on below line we are creating a
            text view for displaying a text-->
        <TextView
            android:id="@+id/idTVLngName"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="5dp"
            android:padding="8dp"
            android:text="Language"
            android:textColor="@color/black"
            android:textSize="18sp"
            android:textStyle="bold" />
 
    </RelativeLayout>
 
</androidx.cardview.widget.CardView>

Шаг 4: Создание класса адаптера

Перейдите к приложению> java> имени пакета вашего приложения> щелкните его правой кнопкой мыши> «Создать»> класс Kotlin и назовите его как LanguageRVAdapter и добавьте к нему приведенный ниже код. В код добавлены комментарии для более подробного ознакомления.

Kotlin




package com.gtappdevelopers.kotlingfgproject
 
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
 
class LanguageRVAdapter(
    // on below line we are passing variables
    // as course list and context
    private var lngList: ArrayList<String>,
) : RecyclerView.Adapter<LanguageRVAdapter.ViewHolder>() {
    override fun onCreateViewHolder(
        parent: ViewGroup,
        viewType: Int
    ): LanguageRVAdapter.ViewHolder {
        // this method is use to inflate the layout file
        // which we have created for our recycler view.
        // on below line we are inflating our layout file.
        val itemView = LayoutInflater.from(parent.context).inflate(
            R.layout.lng_rv_item,
            parent, false
        )
        // at last we are returning our view holder
        // class with our item View File.
        return LanguageRVAdapter.ViewHolder(itemView)
    }
 
    override fun onBindViewHolder(holder: LanguageRVAdapter.ViewHolder, position: Int) {
        // on below line we are setting text to our text view.
        holder.lngTV.text = lngList.get(position)
    }
 
    override fun getItemCount(): Int {
        // on below line we are
        // returning the size of list.
        return lngList.size
    }
 
    class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        // on below line we are initializing our text view.
        val lngTV: TextView = itemView.findViewById(R.id.idTVLngName)
    }
 
}

Java




package com.gtappdevelopers.googlemapsroutes.RecyclerView;
 
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.gtappdevelopers.googlemapsroutes.R;
import java.util.ArrayList;
 
public class LanguageRVAdapter extends RecyclerView.Adapter<LanguageRVAdapter.ViewHolder> {
    private ArrayList<String> languageRVModalArrayList;
 
    public LanguageRVAdapter(ArrayList<String> languageRVModalArrayList, Context context) {
        this.languageRVModalArrayList = languageRVModalArrayList;
    }
 
    @NonNull
    @Override
    public LanguageRVAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        // this method is use to inflate the layout file
        // which we have created for our recycler view.
        // on below line we are inflating our layout file.
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.lng_rv_item, parent, false);
         
        // at last we are returning our view holder
        // class with our item View File.
        return new ViewHolder(view);
    }
 
    @Override
    public void onBindViewHolder(@NonNull LanguageRVAdapter.ViewHolder holder, int position) {
        // on below line we are setting text to our text view.
        holder.lngTV.setText(languageRVModalArrayList.get(position));
    }
 
    @Override
    public int getItemCount() {
        return languageRVModalArrayList.size();
    }
 
    public class ViewHolder extends RecyclerView.ViewHolder {
        // on below line we are creating variable.
        private TextView lngTV;
 
        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            // on below line we are initialing our variable.
            lngTV = itemView.findViewById(R.id.idTVLngName);
        }
    }
}

Шаг 5: Работа с файлом MainActivity

Перейдите к приложению > java > имени пакета вашего приложения > файлу MainActivity и добавьте приведенный ниже код. В код добавлены комментарии для более подробного ознакомления.

Kotlin




package com.gtappdevelopers.kotlingfgproject
 
import android.os.Bundle
import android.widget.Button
import android.widget.EditText
import androidx.appcompat.app.AppCompatActivity
import androidx.recyclerview.widget.RecyclerView
 
class MainActivity : AppCompatActivity() {
 
    // on below line we are creating variables.
    lateinit var lngRV: RecyclerView
    lateinit var addEdt: EditText
    lateinit var addBtn: Button
    lateinit var lngList: ArrayList<String>
    lateinit var lngRVAdapter: LanguageRVAdapter
 
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
         
        // on below line we are initializing our variables.
        lngRV = findViewById(R.id.idRVItems)
        addEdt = findViewById(R.id.idEdtAdd)
        addBtn = findViewById(R.id.idBtnAdd)
        lngList = ArrayList()
 
        // on below line we are
        // adding data to our list.
        lngList.plusAssign("C++")
        lngList.plusAssign("C")
        lngList.plusAssign("Java")
         
        // on below line we are adding our list to our adapter.
        lngRVAdapter = LanguageRVAdapter(lngList = lngList)
 
        // on below line we are setting
        // adapter to our recycler view.
        lngRV.adapter = lngRVAdapter
 
        // on below line we are adding click listener
        // for our add button.
        addBtn.setOnClickListener {
            // on below line we are calling add item method.
            addItem(addEdt.text.toString())
        }
        // on below line we are notifying adapter
        // that data in adapter has been updated.
        lngRVAdapter.notifyDataSetChanged()
 
    }
 
    // on below line we are creating a
    // new function to add item.
    private fun addItem(item: String) {
        // on below line we are checking
        // if item is empty or not.
        if (item.isNotEmpty()) {
            // on below line we are
            // adding item to our list
            lngList.plusAssign(item)
            // on below line we are notifying
            // adapter that data has updated.
            lngRVAdapter.notifyDataSetChanged()
        }
    }
}

Java




package com.gtappdevelopers.googlemapsroutes;
 
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.RecyclerView;
import com.gtappdevelopers.googlemapsroutes.RecyclerView.LanguageRVAdapter;
import java.util.ArrayList;
 
public class MainActivity extends AppCompatActivity {
 
    // on below line we are creating variables.
    private RecyclerView lngRV;
    private EditText addEdt;
    private Button addBtn;
    private ArrayList<String> lngList;
    private LanguageRVAdapter lngRVAdapter;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
         
        // on below line we are initializing our variables.
        lngRV = findViewById(R.id.idRVLanguages);
        addEdt = findViewById(R.id.idEdtAdd);
        addBtn = findViewById(R.id.idBtnAdd);
        lngList = new ArrayList<>();
 
        // on below line we are adding data to our list.
        lngList.add("C++");
        lngList.add("C");
        lngList.add("Java");
 
        // on below line we are adding our list to our adapter.
        lngRVAdapter = new LanguageRVAdapter(lngList);
 
        // on below line we are setting
        // adapter to our recycler view.
        lngRV.setAdapter(lngRVAdapter);
 
        // on below line we are adding click listener for our add button.