Tengo un AlertDialog y setCancelable()
es falso. En Onbackpressed
función, quiero que AlertDialog se cierre. Pero cuando setCancelable()
es falso, la tecla de retroceso no funciona en absoluto. ¿Qué debo hacer para deshacerme de este problema? No quiero cambiar setCancelable()
a verdadero porque tendré otro 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()
}
}
Respuestas:
simplemente agregue un onKeyListener y cancele el diálogo en el evento de tecla de retroceso.
fuente
La solución más fácil para este problema es establecer
OnKeyListener
y detectar automáticamente cuándo el usuario presiona el botón Atrás.Java:
Kotlin:
Tenga en cuenta que agregué una condición adicional en la instrucción if, todo lo que hace es asegurarse de que no se active dos veces.
Espero que esto te ayude.
fuente
Cuando veo que crea dialogBuilder es público, ¿por qué no lo llama en un alertDialog público y luego lo muestra usando alertDilog.show () y cierra al presionar hacia atrás?
fuente
fuente
si no desea cerrar el cuadro de diálogo cuando se toca fuera del área del cuadro de diálogo, puede establecer la propiedad
y si desea cerrar el cuadro de diálogo en la contrapresión, debe llamar al método en keyListener
fuente