ViewModelStoreOwner не был предоставлен через LocalViewModelStoreOwnerAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 ViewModelStoreOwner не был предоставлен через LocalViewModelStoreOwner

Сообщение 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
}
}


Подробнее здесь: https://stackoverflow.com/questions/693 ... storeowner
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»