Для начала создадим класс адаптера и настроим его поведение, когда список контактов пуст.
Если в вашем приложении возможна ситуация, когда тот или иной списковый элемент не будет содержать данные, крайне желательно не оставлять элемент пустым, а выдать сообщение о том, что список пустой.
Создадим класс адаптера ContactsAdapter с классом ContactHolder внутри.
Теперь реализуем вывод сообщения о том, что список пуст. Обратите внимание, что в заготовленном проекте есть два макета - list_contact.xml и list_no_items.xml. Первый макет используется для вывода пункта списка, а второй макет будет использован, когда размер коллекции с контактами будет равен нулю.
Идея состоит в следующем - если коллекция с контактами пустая, то наш списковый элемент будет содержать один пункт, но для этого одного пункта мы будем использовать макет list_no_items.xml , в котором содержится сообщение о том, что список пустой.
Для начала изменим метод getItemCount(). Если list.size() будет равен нулю, то мы должны вернуть 1 (чтобы вывести наш один пункт списка с сообщением), если list.size() будет больше нуля, значит у нас есть контакты для отображения, а значит мы просто вернем list.size().
То есть, в любом случае, наш список будет содержать, как минимум, один элемент.
Далее, в методе onCreateViewHolder() мы должны проверить - есть ли у нас данные в списке контактов? Если данных нет, то для создания view мы используем макет list_no_items.xml, а если данные есть, то используем макет list_contact.xml.
Для того, чтобы распознать эту ситуацию, воспользуемся таким параметром, как viewType. Переопределим метод getItemViewType() и пропишем логику установки типа пункта списка.