Eu tenho um AlertDialog e setCancelable()
é falso. Na Onbackpressed
função, quero que o AlertDialog seja fechado. Mas quando setCancelable()
é falso, a tecla Voltar não funciona. O que devo fazer para me livrar desse problema? Não quero mudar setCancelable()
para true porque terei outro problema.
import android.os.Bundle
import android.widget.Toast
import androidx.appcompat.app.AlertDialog
import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity() {
lateinit var dialogBuilder: AlertDialog.Builder
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
dialogBuilder = AlertDialog.Builder(this)
dialogBuilder.setMessage("Check your internet connection")
.setPositiveButton("OK") { _, _ ->
Toast.makeText(this, "OK", Toast.LENGTH_LONG).show()
}.setCancelable(false)
.create().show()
}
}
Respostas:
basta adicionar um onKeyListener e cancelar a caixa de diálogo no evento de tecla Voltar.
fonte
A solução mais fácil para esse problema é definir
OnKeyListener
e detectar automaticamente quando o usuário pressionar o botão Voltar.Java:
Kotlin:
Observe que eu adicionei uma condição extra na instrução if, tudo o que faz é garantir que isso não seja acionado duas vezes.
Espero que isso ajude você.
fonte
Como vejo que você cria dialogBuilder é público, por que não chamar isso em um alertDialog público e depois mostrá-lo usando alertDilog.show () e fechar novamente? Clique em atividade e ignore o diálogo alertDilog.dismiss () substitua o onBackPress e o ignore aqui
fonte
fonte
se você não quiser fechar a caixa de diálogo quando tocar em sua área externa, poderá definir a propriedade
e se você quiser descartar a caixa de diálogo ao pressionar back-end, precisará chamar o método em keyListener
fonte