Я хочу отобразить новый список элементов, полученных из ViewModel в пользовательском RecyclerView.Adapter. Для этого я передаю полученный список адаптеру и вызываю notifyDataSetChanged()
, но в интерфейсе ничего не меняется.
Я отладил код, и в списке адаптера было 1 элемент (пользовательский интерфейс отображал 1 элемент), в новом извлеченном списке было 2 элемента - после установки нового списка в адаптере и вызова notifyDataSetChanged()
пользовательский интерфейс не изменился, но должендобавьте 1 элемент.
Код фрагмента:
trip_details_participantsList.layoutManager = LinearLayoutManager(activity, LinearLayoutManager.HORIZONTAL, false)
trip_details_participantsList.adapter = userBriefAdapter
tripsDetailsViewModel.getTripParticipants(tripId).observe(this, Observer {participants ->
tripsDetailsViewModel.getUsersBriefs(participants.map { x -> x.userId }).observe(this, Observer{ users ->
userBriefAdapter.setData(users)
})
})
Пользовательский адаптер и ViewHolder:
class UserBriefAdapter : RecyclerView.Adapter<UserBriefViewHolder>() {
private var users: List<UserBrief> = mutableListOf()
fun setData(items: List<UserBrief>){
this.users = items
notifyDataSetChanged()
}
override fun onBindViewHolder(holder: UserBriefViewHolder, position: Int) =
holder.bind(users[position])
override fun getItemCount() = users.size
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): UserBriefViewHolder {
val inflater = LayoutInflater.from(parent.context)
return UserBriefViewHolder(inflater, parent)
}
}
class UserBriefViewHolder(inflater: LayoutInflater, parent: ViewGroup) : RecyclerView.ViewHolder(inflater.inflate(
R.layout.trip_details_list_item, parent, false)) {
private var profilePictureImageView: ImageView = itemView.findViewById(R.id.trips_details_profile_image)
fun bind(userBrief: UserBrief){
Picasso.get()
.load(userBrief.profilePictureUrl)
.into(profilePictureImageView)
}
}
Я уже читал существующие темы по этому поводу, но каждое принятое решениеэто что-то вроде функции setData()
моего адаптера с notifyDataSetChanged()
. Я также пытался установить новый экземпляр UserBriefAdapter в RecyclerView каждый раз, когда наблюдаемые значения менялись, но результаты были одинаковыми. Когда я перехожу назад и вперед, тогда он правильно отображает элементы, но я хочу достичь этого, не меняя представление.