Как обновить данные адаптера 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.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. РЕКОМЕНДУЕМЫЕ СТАТЬИ |