问题描述
我创建了一个 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 (将#修改为@)