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