Итак, у меня есть простая реализация для отображения списка пользователей в RecyclerView
, а список запрашивается в ViewModel
как LiveData
.
Проблема заключается в том, что пользовательский интерфейс не обновляется, чтобы отображать последний список, называемый users
, даже когда список наблюдается.Я только что настроил список демонстрационных пользователей.
Вот мой ViewModel:
class MainViewModel : ViewModel() {
private val demoData = listOf(
User(userName = "Bob", favoriteColor = "Green"),
User(userName = "Jim", favoriteColor = "Red"),
User(userName = "Park", favoriteColor = "Blue"),
User(userName = "Tom", favoriteColor = "Yellow"),
User(userName = "Lee", favoriteColor = "Black"),
User(userName = "Xiu", favoriteColor = "Gray")
)
private val _users = MutableLiveData<List<User>>()
val users: LiveData<List<User>>
get() = _users
init {
_users.value = listOf()
}
fun loadUsers() {
_users.value = demoData.toMutableList().apply { shuffle() }
}
}
И прикрепленный фрагмент моего ViewModel:
// ...
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
viewModel = ViewModelProviders.of(this).get(MainViewModel::class.java)
viewModel.users.observe(this, Observer {
mAdapter.notifyDataSetChanged()
})
mAdapter = UsersAdapter(viewModel.users.value!!)
mainRV = view?.findViewById<RecyclerView>(R.id.rv_main)?.apply {
adapter = mAdapter
layoutManager = LinearLayoutManager(view?.context)
}
viewModel.loadUsers()
}
PS the UsersAdapter
это обычный RecyclerView.Adapter
.
Я убедился, что позвонил setValue
в своем списке пользователей, чтобы вызвать Обозревателя, поэтому я не уверен, чего здесь не хватает.Мой адаптер неправильно настроен?