¿Cómo actualizar los datos del adaptador RecycleView en Android?

RecyclerView se usa en muchas aplicaciones de Android para mostrar la lista de datos dentro de las aplicaciones de Android. Podemos agregar o eliminar dinámicamente datos de nuestra vista de recicladores. Para actualizar datos en RecyclerView, tenemos que usar la clase Adapter. El adaptador maneja todos los datos dentro de nuestra vista de reciclador. En este artículo, veremos cómo actualizar los datos del adaptador de vista de reciclador para actualizar nuestra vista de reciclador.

Nota : este artículo de Android cubre los lenguajes Java y Kotlin

Implementación paso a paso

Paso 1: crea un nuevo proyecto en Android Studio

Cómo crear/iniciar un nuevo proyecto en Android Studio

Paso 2: trabajar con el archivo activity_main.xml

Vaya a aplicación > res > diseño > actividad_principal.xml y agréguele el siguiente código. Se agregan comentarios en el código para conocer en detalle. 

XML

<?xml version="1.0" encoding="utf-8"?>
<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: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>

Paso 3: cree un archivo de diseño para el elemento de RecyclerView

Vaya a app>res>layout>New>Layout Resource File y asígnele el nombre lng_rv_item y agréguele el siguiente código. Se agregan comentarios en el código para conocer en detalle. 

XML

<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    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 displayig 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>

Paso 4: crear una clase de adaptador

Vaya a aplicación>java>nombre del paquete de su aplicación>haga clic con el botón derecho en él>Nuevo>clase Kotlin y asígnele el nombre LanguageRVAdapter y agréguele el siguiente código. Se agregan comentarios en el código para conocer en detalle. 

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);
        }
    }
}

Paso 5: Trabajar con el archivo MainActivity 

Vaya a aplicación > java > nombre del paquete de su aplicación > archivo MainActivity y agregue el código a continuación. Se agregan comentarios en el código para conocer en detalle. 

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 listner
        // 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 ite 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 listner for our add button.
        addBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // on below line we are calling 
                // add item method.
                addItem(addEdt.getText.toString());
            }
        });
    }
  
    // on below line we are creating 
    // a new function to add item.
    private void addItem(String item) {
        // on below line we are checking
        // if item is empty or not.
        if (!item.isEmpty()) {
            // on below line we are adding
            // item to our list
            lngList.add(item);
            // on below line we are notifying 
            // adapter that data has updated.
            lngRVAdapter.notifyDataSetChanged();
        }
    }
  
}

Ahora ejecute su aplicación para ver el resultado. 

Producción:

Publicación traducida automáticamente

Artículo escrito por chaitanyamunje y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *