Как обновить данные адаптера RecycleView в Android?
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 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.kotlingfgprojectimport android.view.LayoutInflaterimport android.view.Viewimport android.view.ViewGroupimport android.widget.TextViewimport androidx.recyclerview.widget.RecyclerViewclass 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.kotlingfgprojectimport android.os.Bundleimport android.widget.Buttonimport android.widget.EditTextimport androidx.appcompat.app.AppCompatActivityimport androidx.recyclerview.widget.RecyclerViewclass 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.РЕКОМЕНДУЕМЫЕ СТАТЬИ |