В настоящее время я переоцениваю переработку, чтобы использовать Compose. Мы решили использовать подход снизу вверх, индивидуально преобразив представления элементов View Holder для использования Composeview , который содержит композицию. Мы используем Dagger2 для инъекции зависимостей, так как наша довольно большая кодовая база сделала миграцию, чтобы рукоять, была более широкой областью, так что это было установлено на заднем плане. Однако, когда я прокручиваю, когда на экране есть несколько DataitEmcomposables , приложение сбоя со следующей Stacktrace:
java.lang.IllegalStateException: No ViewModelStoreOwner was provided via LocalViewModelStoreOwner
at com.****.****.viewHolders.DataItemViewHolder$bindData$1$1$1.invoke(DataItemViewHolder.kt:42)
at com.****.****.viewHolders.DataItemViewHolder$bindData$1$1$1.invoke(DataItemViewHolder.kt:41)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:107)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
at androidx.compose.runtime.RecomposeScopeImpl.compose(RecomposeScopeImpl.kt:140)
at androidx.compose.runtime.ComposerImpl.recomposeToGroupEnd(Composer.kt:2156)
at androidx.compose.runtime.ComposerImpl.skipToGroupEnd(Composer.kt:2422)
at com.****.****.compose.theme.ThemeKt.MaterialTheme(Theme.kt:142)
< /code>
Звездочки - это просто вычищенные имена пакетов.override fun bindData(dataItem: DataItem, position: Int) {
binding.root.apply {
// Dispose the Composition when the view's LifecycleOwner
// is destroyed
setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed)
setContent {
MaterialTheme {
DataItemComposable(
repository = repository,
postId = dataItem.id,
)
}
}
}
}
< /code>
dataitemcomposable.kt
@Composable
fun DataItemComposable(
repository: DataRepository,
postId: String,
) {
val viewModel: DataItemViewModel = viewModel(
factory = DataItemViewModel.DataItemViewModelFactory(
repository,
itemId
)
)
var state by remember { viewModel.itemState }
Box {
// Content using state
}
}
< /code>
dataitemviewmodel.kt
class DataItemViewModel(
private val repository: DataRepository,
private val itemId: String
) : ViewModel() {
val itemState = mutableStateOf("")
// ...DO some stuff with the parameters
...
...
...
/* ===== Factory ===== */
public class DataItemViewModelFactory(
val repository: DataRepository,
val postId: String
) :
ViewModelProvider.NewInstanceFactory() {
override fun create(modelClass: Class): T =
DataItemViewModel(
repository,
postId
) as T
}
}
Подробнее здесь: https://stackoverflow.com/questions/693 ... storeowner
ViewModelStoreOwner не был предоставлен через LocalViewModelStoreOwner ⇐ Android
Форум для тех, кто программирует под Android
1745657785
Anonymous
В настоящее время я переоцениваю переработку, чтобы использовать Compose. Мы решили использовать подход снизу вверх, индивидуально преобразив представления элементов View Holder для использования Composeview , который содержит композицию. Мы используем Dagger2 для инъекции зависимостей, так как наша довольно большая кодовая база сделала миграцию, чтобы рукоять, была более широкой областью, так что это было установлено на заднем плане. Однако, когда я прокручиваю, когда на экране есть несколько DataitEmcomposables , приложение сбоя со следующей Stacktrace:
java.lang.IllegalStateException: No ViewModelStoreOwner was provided via LocalViewModelStoreOwner
at com.****.****.viewHolders.DataItemViewHolder$bindData$1$1$1.invoke(DataItemViewHolder.kt:42)
at com.****.****.viewHolders.DataItemViewHolder$bindData$1$1$1.invoke(DataItemViewHolder.kt:41)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:107)
at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34)
at androidx.compose.runtime.RecomposeScopeImpl.compose(RecomposeScopeImpl.kt:140)
at androidx.compose.runtime.ComposerImpl.recomposeToGroupEnd(Composer.kt:2156)
at androidx.compose.runtime.ComposerImpl.skipToGroupEnd(Composer.kt:2422)
at com.****.****.compose.theme.ThemeKt.MaterialTheme(Theme.kt:142)
< /code>
Звездочки - это просто вычищенные имена пакетов.override fun bindData(dataItem: DataItem, position: Int) {
binding.root.apply {
// Dispose the Composition when the view's LifecycleOwner
// is destroyed
setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed)
setContent {
MaterialTheme {
DataItemComposable(
repository = repository,
postId = dataItem.id,
)
}
}
}
}
< /code>
dataitemcomposable.kt
@Composable
fun DataItemComposable(
repository: DataRepository,
postId: String,
) {
val viewModel: DataItemViewModel = viewModel(
factory = DataItemViewModel.DataItemViewModelFactory(
repository,
itemId
)
)
var state by remember { viewModel.itemState }
Box {
// Content using state
}
}
< /code>
dataitemviewmodel.kt
class DataItemViewModel(
private val repository: DataRepository,
private val itemId: String
) : ViewModel() {
val itemState = mutableStateOf("")
// ...DO some stuff with the parameters
...
...
...
/* ===== Factory ===== */
public class DataItemViewModelFactory(
val repository: DataRepository,
val postId: String
) :
ViewModelProvider.NewInstanceFactory() {
override fun create(modelClass: Class): T =
DataItemViewModel(
repository,
postId
) as T
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/69395507/no-viewmodelstoreowner-was-provided-via-localviewmodelstoreowner[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия