Изменение элемента, который не принадлежит adapter-у
У меня есть RecyclerView, для него я написал adapter. И мне надо, чтобы когда RecyclerView пустой, на экране появлялась надпись "Список пуст". Как мне изменять родительское view из adapter, или как это сделать по другому?
Ответы (2 шт):
Обычно это делается примерно так:
1)Сначала рядом с RecyclerView в лейауте лепим TextView, примерно так:
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recordRecyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:textAlignment="center"
android:id="@+id/emptyText"
android:text="Список пуст"
/>
2)Далее в фрагменте/активити там где заполняем данными RecyclerView втыкаем примерно следующий вызов:
int itemCount = adapter.getItemCount();
if(itemCount > 0)
emptyText.setVisibility(View.GONE);
else
emptyText.setVisibility(View.VISIBLE);
1й вариант это использование LiveData. И каждый раз при удалении/добавлении элементов передавать в лайвдату список элементов. Ее же завязать на активность и при ее изменении проверять если кол-во элементов 0 то выводить надпись "Список пуст".
2й вариант создать интерфейс
interface OnItemsChangedListener {
fun onItemsChanged(list: ArrayList<Any>)
}
передавать его в adapter
var callback: OnItemClickListener? = null
И каждый раз при удалении/добавлении элементов передавать элементы в интерфейс
holder.buttonRemove.setOnClickListener {
if(callback != null) callback.onItemsChanged(items)
}
там где мы объявляем adapter
val adapter = MyAdapter(items)
adapter.callback = object : OnItemClickListener {
override fun onItemsChanged(list: ArrayList<Any>) {
if(list.isEmpty) {
//show empty text
}
else {
//hide empty text
}
}
}
3й вариант (не рекомендую) передавать родительский контейнер в адаптер и там над ним проводить манипуляции