Ich habe einen AlertDialog und er setCancelable()
ist falsch. In der Onbackpressed
Funktion möchte ich, dass der AlertDialog geschlossen wird. Aber wenn setCancelable()
es falsch ist, funktioniert die Zurück-Taste überhaupt nicht. Was soll ich tun, um dieses Problem zu beseitigen? Ich möchte nicht setCancelable()
zu true wechseln , da ich ein anderes Problem haben werde.
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()
}
}
Antworten:
Fügen Sie einfach einen onKeyListener hinzu und brechen Sie den Dialog beim Zurück-Schlüsselereignis ab.
quelle
Die einfachste Lösung für dieses Problem besteht darin, eine
OnKeyListener
festzulegen und automatisch zu erkennen, wenn der Benutzer die Zurück-Taste drückt.Java:
Kotlin:
Beachten Sie, dass ich der if-Anweisung eine zusätzliche Bedingung hinzugefügt habe. Dies muss lediglich sicherstellen, dass diese nicht zweimal ausgelöst wird.
Ich hoffe das hilft dir.
quelle
Wie ich sehe, erstellen Sie dialogBuilder ist öffentlich, warum rufen Sie dies nicht in einem öffentlichen alertDialog auf und zeigen es dann mit alertDilog.show () an und schließen Sie es auf pressClick in activity und schließen Sie den Dialog alertDilog.dismiss (), überschreiben Sie onBackPress und schließen Sie es hier
quelle
quelle
Wenn Sie den Dialog nicht schließen möchten, wenn Sie ihn außerhalb des Dialogbereichs berühren, können Sie die Eigenschaft festlegen
und wenn Sie den Dialog beim Zurückdrücken schließen möchten, müssen Sie die Methode bei keyListener aufrufen
quelle