Изменение элемента, который не принадлежит adapter-у

У меня есть RecyclerView, для него я написал adapter. И мне надо, чтобы когда RecyclerView пустой, на экране появлялась надпись "Список пуст". Как мне изменять родительское view из adapter, или как это сделать по другому?


Ответы (2 шт):

Автор решения: Barmaley

Обычно это делается примерно так:

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);
→ Ссылка
Автор решения: Tiarait

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й вариант (не рекомендую) передавать родительский контейнер в адаптер и там над ним проводить манипуляции

→ Ссылка