#android #kotlin #android-jetpack-compose
Вопрос:
У меня есть RecyclerView
файл, который создается и добавляется в мой макет компоновки с помощью AndroidView
функции.
@Composable
fun MyView(data: State<List<Item>>) {
...
AndroidView(factory = { context ->
RecyclerView(context).apply {
layoutParams = ViewGroup.LayoutParams(MATCH_PARENT, WRAP_CONTENT)
layoutManager = LinearLayoutManager(context)
adapter = ItemListAdapter().also { it.submitList(data.value) }
}
})
}
Я использовал RecyclerView
вместо LazyColumn
, потому что я хочу добавлять и удалять анимации, которые еще не поддерживаются LazyColumn
, и я достигаю этого с помощью RecyclerView с помощью DiffUtil
Теперь, каждый раз, когда я data
изменяю, представление перекомпозируется, таким образом, RecyclerView создается заново, а анимация не отображается.
Каков наилучший способ, которым я могу этого достичь? Должен ли я просто передать живые данные, а затем просмотреть их в адаптере RecyclerView?
Спасибо
Ответ №1:
Используйте update
обратный вызов, он вызывается при каждой перекомпозиции:
AndroidView(
factory = { context ->
RecyclerView(context).apply {
layoutParams = ViewGroup.LayoutParams(MATCH_PARENT, WRAP_CONTENT)
layoutManager = LinearLayoutManager(context)
adapter = ItemListAdapter().also { it.submitList().value }
}
},
update = { recyclerView ->
}
)
Не знаю, почему вы говорите, что «RecyclerView воссоздается» при каждой повторной композиции, это не должно быть так. Я протестировал, и update = {
меня вызывают только при перекомпозиции