我有一个状态流,它为我提供来自 ViewModel 的可变状态流的值,我想做的是,我想根据按钮单击显示隐藏 Web 视图。当值为 true 时,我想显示 Web 视图,当我想隐藏它时,我将其值更改为 false。这些值已正确更新,但未反映内部数据绑定。这是我的视图模型
class ArticleDetailsViewModel : ViewModel() {
private val _isWebViewShowing = MutableStateFlow(false)
val isWebViewShowing: StateFlow<Boolean>
get() = _isWebViewShowing
fun onReadMoreClicked() {
_isWebViewShowing.value = true
}
fun changeWebViewState() {
_isWebViewShowing.value = false
}}
Run Code Online (Sandbox Code Playgroud)
这是我正在进行比较的 XML
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable
name="article"
type="io.infinity.newsapp.model.domain.ArticleDomainModel" />
<variable
name="viewModel"
type="io.infinity.newsapp.viewmodels.ArticleDetailsViewModel" />
<import type="android.view.View"/>
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<include
android:id="@+id/toolbar"
layout="@layout/toolbar_generic"
/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:visibility="@{viewModel.isWebViewShowing().value ? View.INVISIBLE :View.VISIBLE }"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="@+id/toolbar"
app:layout_constraintStart_toStartOf="@+id/toolbar" …
Run Code Online (Sandbox Code Playgroud) android kotlin android-livedata kotlin-coroutines kotlin-stateflow
我正在使用 jetpack 数据存储来存储用户首选项。我要完美地检索数据,但是当我尝试在数据存储中写入数据时,它给了我一个错误。附加了错误,它是一个未找到的类异常我不知道依赖项是否有问题,或者只是我有问题。
这是我用来处理数据存储的类
enum class UiMode {
LIGHT,DARK
}
class DarkModeManager (context : Context){
private val dataStore = context.createDataStore("settings")
val uiModeFlow: Flow<UiMode> = dataStore.data
.catch {
if (it is IOException) {
it.printStackTrace()
emit(emptyPreferences())
} else {
throw it
}
}
.map { preference ->
val isDarkMode = preference[IS_DARK_MODE] ?: false
when (isDarkMode) {
true -> UiMode.DARK
false -> UiMode.LIGHT
}
}
suspend fun setUiMode(uiMode: UiMode) {
dataStore.edit { preferences ->
preferences[IS_DARK_MODE] = when (uiMode) {
UiMode.LIGHT -> false
UiMode.DARK …
Run Code Online (Sandbox Code Playgroud)