Android Studio 3.6
我要显示对话框,然后按OK即可将其隐藏
我使用LiveData和ViewModel。 所以在我的活动中:
private lateinit var mainViewModel: MainViewModel
mainViewModel = ViewModelProviders.of(this).get(MainViewModel::class.java)
// Call only when activity is visible to user or rotate device or change lanugage
mainViewModel.getShowDialogLiveData().observe(this, Observer {
if (it != null) {
showDialog(it)
}
})
private fun showDialog(text: String) {
val builder = AlertDialog.Builder(this)
builder.setMessage(text)
.setCancelable(false)
.setPositiveButton("OK", { dialog, id ->
dialog.cancel()
dialog.dismiss()
})
val alert = builder.create()
alert.show()
}
fun pressButtonShowDialog() {
mainViewModel.isSuccessPaymentConfirm(true)
}
override fun onActivityResult(requestCode: Int, resultCode: Int, resultIntent: Intent?) {
if (requestCode == PAYMENT_CONFIRM) {
if (resultCode == RESULT_OK) {
mainViewM
}
}
}
和我的 MainViewModel.kt
class MainViewModel(application: Application) : AndroidViewModel(application) {
private val showDialogLiveData = MutableLiveData<String>()
fun isSuccessPaymentConfirm(isSuccessPaymentConfirm: Boolean) {
isShowDialogLiveData(true)
}
fun isShowDialogLiveData(isShowDialogLiveData: Boolean) {
this.isShowDialogLiveData.value = isShowDialogLiveData
if (isShowDialogLiveData) {
showDialogLiveData.value = "Message on dialog"
}
}
fun getShowDialogLiveData(): LiveData<String> {
return showDialogLiveData
}
因此,在进行活动时,按按钮,然后呼叫pressButtonShowDialog()
。结果呼叫mainViewModel.getShowDialogLiveData()
。
结果显示对话框。当我旋转设备或更改语言时,再次显示该对话框。因为再次调用mainViewModel.getShowDialogLiveData()
。
真好很好。
然后我按OK(确定)按钮,并且对话框隐藏(dialog.dismiss()
)。很好。
但是当我旋转设备或更改语言时,再次出现对话框,因为再次调用方法 mainViewModel.getShowDialogLiveData()
。
如何避免这种情况? 当按下“确定”按钮时,对话框将不再显示。
也许我需要取消getShowDialogLiveData
的禁止。或者,showDialogLiveData
必须停止发生火灾。也许还有其他解决方案?