如何使用 Kotlin 协程流 UI 状态?使用 stateflow 屏幕旋转后 UI 状态更改

问题描述

我创建了一个 Activity 和 viewmodel,用于收集 Stateflows 以切换视图。

这是我的活动类

@AndroidEntryPoint 类 LoggingActivity : AppCompatActivity() {

private var _bind : activityloggingBinding? = null

private val bind : activityloggingBinding get() = _bind!!

private lateinit var email : String

private val loggingviewmodel : Loggingviewmodel by viewmodels()



override fun onCreate(savedInstanceState : Bundle?) {
    super.onCreate(savedInstanceState)
    _bind = activityloggingBinding.inflate(layoutInflater)
    setContentView(bind.root)

    getExtras()
    collectToggleViewFlow()

    bind.btnSave.setonClickListener {
        loggingviewmodel.toggleView()
    }

}

private fun getExtras() {
    email = intent.extras?.getString("email")!!

    when (email) {
        "No User" -> loggingviewmodel.toggleView()
        else -> loggingviewmodel.toggleView()
    }
}

private fun collectToggleViewFlow() {
    lifecycleScope.launchWhenStarted {
        loggingviewmodel.toggleFlow.collect{
            when(it){
                is Loggingviewmodel.ToggleView.SignUp -> {
                    bind.inputName.visible()
                    bind.inputPhoneNo.visible()
                }
                is Loggingviewmodel.ToggleView.SignIn -> {
                    bind.inputName.inVisible()
                    bind.inputPhoneNo.inVisible()
                }
                is Loggingviewmodel.ToggleView.nothing -> Unit
            }
        }
    }
 }
}

这是我的 viewmodel 类

@Hiltviewmodel class Loggingviewmodel @Inject 构造函数(private val firebaseAuthRepo : FirebaseAuthRepo,) : viewmodel() {

private val _toggleFlow : MutableStateFlow<ToggleView> = MutableStateFlow(ToggleView.nothing)

val toggleFlow : StateFlow<ToggleView> get() = _toggleFlow


fun toggleView() {
    when (toggleFlow.value) {
        ToggleView.SignIn -> _toggleFlow.value = ToggleView.SignUp
        ToggleView.SignUp -> _toggleFlow.value = ToggleView.SignIn
        else -> _toggleFlow.value = ToggleView.SignIn
    }
}


sealed class ToggleView {
    object nothing : ToggleView()
    object SignIn : ToggleView()
    object SignUp : ToggleView()
}

}

我创建了按钮单击事件以在视图可见性之间切换。当我点击注册按钮时,它工作正常。

Portrait mode image1 | toggleview by clicking button

Portrait mode image2 | toggleview by clicking button

当我将手机旋转到横向时,如果没有 buttonclick 事件它会自动切换视图,我不知道为什么?

Landscape mode image | toggleview automatically

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)