android - 旋转或更改语言对话框后再次显示
问题描述
安卓工作室 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()
。
我怎样才能避免这种情况?当按下 OK 按钮时,对话框不能再次显示。
也许我需要从getShowDialogLiveData
. 或者也许showDialogLiveData
必须停止火灾事件。或者也许有其他解决方案?
解决方案
在您的清单中将此行添加到所需的活动。
android:configChanges="keyboardHidden|keyboard|orientation|screenSize"
最终代码如下所示
<activity android:name=".activities.xyz"
android:configChanges="keyboardHidden|keyboard|orientation|screenSize"/>
推荐阅读
- ajax - 如何在附加jquery代码相同的laravel图像中动态图像
- php - 有条件地在 woocommerce 产品页面上显示变体描述
- express-gateway - 在 Express Gateway 中,如何停止添加斜杠的代理端点
- google-analytics - 从 Google Analytics Data API (GA4) 获取基于多个指标
- airflow - Airflow - 在通过 TriggerDagRunOperator 发送之前设置 dag_run conf 值
- django - 在 Django 表单中查找小部件的选定值
- java - 运行 Quarkus 生产 Jar 时出错
- c++ - 在 C++ 中寻找更好的条件继承方法
- c# - 如何使用位图或图像一次读取一行图像像素
- maven - 即使在添加镜像后也会出现“存储库的阻止镜像”maven错误