旋转或更改语言后对话框再次显示

时间:2019-11-27 11:14:01

标签: android android-viewmodel

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必须停止发生火灾。也许还有其他解决方案?

2 个答案:

答案 0 :(得分:1)

在清单中将此行添加到所需的活动中。

x=model_D_256.predict([fixed_img_tensor])

最终代码如下

android:configChanges="keyboardHidden|keyboard|orientation|screenSize"

答案 1 :(得分:0)

您可以尝试将其添加到每个活动的清单中

            android:configChanges="orientation|screenSize"

这样做可以使您旋转时活动不会结束并重新加载内容enter image description here