#android #kotlin #android-recyclerview #viewmodel #swiperefreshlayout
#Android #kotlin #android-recyclerview #viewmodel #swiperefreshlayout
Вопрос:
Я использую ViewModel
для загрузки данных и установки их в SwipeRefreshLayout RecyclerView
mAdapter = NewRecyclerViewAdapter(listAct, this@MainActivity, hashMap)
list?.adapter = mAdapter
workViewModel.getRequests()?.observe(
this, Observer { resource ->
resource?.data?.let {
Log.d(TAG,it.size)
mAdapter.setOrders(it)
}
}
)
workViewModel = ViewModelProviders.of(
this,
ViewModelFactory.getInstance(activity.application)
).get(WorkViewModel::class.java)
.......
swipe_container.setOnRefreshListener {
mAdapter.setWorkOrders(listAct)
mAdapter.notifyDataSetChanged()
}
Я использую журнал для отладки, он отображает размер 2. Данные, похоже, успешно извлекаются, но для них не установлено значение recyclerView
.
Адаптер
private var order = emptyList<Order>()
......
internal fun setOrders(order: List<Order>) {
this.order = order
this.order.sortedBy { it.created_at }
notifyDataSetChanged()
}
Комментарии:
1. также поместите notifyDataSetChanged() в Oberserver
2. добавлен @HappySingh, результат все тот же
3. в setOrders() вы устанавливаете тот же список заказов. Используйте Orders вместо order
4. @HappySingh допустил там ошибку. Сообщение обновлено.
5. Не могли бы вы опубликовать полный код, чтобы его было легко понять
Ответ №1:
Вы устанавливаете тот же список в своих функциях setOrders () Используйте это вместо своей функции
internal fun setOrders(orders: List<Order>) {
this.order = orders.sortedBy { it.created_at }
notifyDataSetChanged()
}
Ответ №2:
Используете ли вы yourRecyclerView.setAdapter(mAdapter )
где-нибудь? Или лучше: вы инициализировали recyclerview и чем настройка адаптера? Если вы используете привязку к данным, проверьте атрибут вашего адаптера в XML-теге recyclerview
Комментарии:
1. да, я это сделал. Находится в этой строке
list?.adapter = mAdapter
2. Хорошо, 2 вещи, в вашем RecyclerView проверьте метод getItemCount , он не должен возвращать 0. И другой, пожалуйста, посмотрите LayoutManager для вашего recyclerview: Пример: rv.LayoutManager = LinearLayoutManager (контекст), а затем установите свой адаптер.
3. проверьте высоту и ширину recyclerview
4. и вопрос, почему вы передаете map в начале?
5. Мне нужно использовать эту карту внутри
onBindView