Метод notifyDataSetChanged
Метод notifyDataSetChanged
у
RecyclerView.Adapter
говорит списку, что данные изменились
и нужно снова вызвать
onBindViewHolder.
Вызывают после смены списка
или когда изменился
getItemCount.
Для точечных обновлений есть notifyItem*,
их отдельно не разбирают.
Синтаксис
adapter.notifyDataSetChanged()
Пример
Давайте добавим строку и обновим список:
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Button
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
class MainActivity : AppCompatActivity() {
private val items = mutableListOf("abcde")
private lateinit var adapter: LineAdapter
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
adapter = LineAdapter(items)
val list = findViewById<RecyclerView>(R.id.list)
list.layoutManager = LinearLayoutManager(this)
list.adapter = adapter
findViewById<Button>(R.id.action).setOnClickListener {
items.add("12345")
adapter.notifyDataSetChanged()
}
}
}
class LineAdapter(private val items: List<String>) :
RecyclerView.Adapter<LineAdapter.Holder>() {
class Holder(view: View) : RecyclerView.ViewHolder(view) {
val label: TextView = view.findViewById(R.id.label)
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): Holder {
val view = LayoutInflater.from(parent.context)
.inflate(R.layout.item_line, parent, false)
return Holder(view)
}
override fun onBindViewHolder(holder: Holder, position: Int) {
holder.label.text = items[position]
}
override fun getItemCount(): Int = items.size
}
На экране после нажатия на кнопку
в списке появится вторая строка "12345".
Смотрите также
-
метод
getItemCount,
который меняется вместе с данными -
метод
onBindViewHolder,
который RecyclerView вызывает снова -
класс
RecyclerView,
который перерисовывает видимые пункты -
класс
Adapter,
на котором вызывают notifyDataSetChanged