AlertDialog dialog.dismiss (), dialog.close () не работает - PullRequest
0 голосов
/ 20 мая 2018

Мне нужно дважды щелкнуть по кнопке (любой: положительный, нейтральный и отрицательный), чтобы закрыть AlertDialog.

import android.annotation.SuppressLint
import android.os.Bundle
import android.support.design.widget.Snackbar
import android.support.v7.app.AlertDialog
import android.support.v7.app.AppCompatActivity
import android.view.KeyEvent
import android.view.View
import com.example.said.puntodeventa.R.layout.layout_addproduct

class someClass : AppCompatActivity() {

@SuppressLint("StringFormatInvalid")
private fun someDialog(){
AlertDialog.Builder(this).apply {
                setTitle("title")
                setMessage("message")
                setNegativeButton("No"){ dialog, which ->
                    anEditText.text.clear()
                    anEditText.requestFocus()
                    dialog.cancel()
                    dialog.dismiss()
                }
                setNeutralButton("Neutral"){ dialog, which ->
                    someEditText.text.clear()
                    someEditText.requestFocus()
                    dialog.cancel()
                    dialog.dismiss()
                }
                setPositiveButton("Yes") { dialog, which ->
                    addProduct()
                    dialog.cancel()
                    dialog.dismiss()
                }
                create()
                show()
            }
        }

private fun addProduct(){
        //some code working properly
    }
}

addProduct() и .text.clear() работают отлично, но AlertDialogне закрывается при первом нажатии на него.

Я пытался использовать только с dialog.cancel(), dialog.dismiss() по отдельности и, похоже, ничего не работает, как будто код отсутствует.

Я также пытался импортировать android.app.AlertDialog с теми же результатами.

Это красный текст в журнале, когда я нажимаю на любую из кнопок, не имеет значения, если это первый раз (когдаAlertDialog не закрывается) или второй (когда он фактически закрывается).

05-19 16:42:34.543 24647-24647/com.example.name.appdemo E/ViewRootImpl: sendUserActionEvent() mView == null

Спасибо

Ответы [ 3 ]

0 голосов
/ 20 мая 2018

AlertDialog автоматически закрывается при нажатии на любую кнопку, поэтому нет необходимости писать dismiss () или cancel ().

Я полагаю, вы дважды показываете диалог, и поэтому вы думаете, чтодля отклонения нужно 2 клика.

Вот код, который работает просто отлично:

 private fun dialogCostPrice() {
    AlertDialog.Builder(this)
            .setTitle("Dialog Title")
            .setMessage("Dialog Message")
            .setPositiveButton("OK", { dialog, whichButton ->

            })
            .setNegativeButton("Cancel", { dialog, whichButton ->

            }).show()
}

И ДА DialogInterface.OnClickListener избыточен в котлине.

0 голосов
/ 21 мая 2018

@ Сказал: я копирую ваш код, и он отлично работает, нужно всего лишь 1 клик, чтобы закрыть положительную или отрицательную кнопку, поэтому я считаю, что проблема не в этой части.

private fun dialogCostPrice(){

    val dialogBuilder = AlertDialog.Builder(this)

    dialogBuilder.setTitle("Dialog Title")
    dialogBuilder.setMessage("Dialog Message")
    dialogBuilder.setPositiveButton("OK", { dialog, whichButton ->
        dialog.dismiss()
    })
    dialogBuilder.setNegativeButton("Cancel", { dialog, whichButton ->
        dialog.dismiss()
    })
    val b = dialogBuilder.create()
    b.show()
    }
0 голосов
/ 20 мая 2018

Не для определения слушателя для события при нажатии DialogInterface.OnClickListener:

fun showDialog() {
    val dialogBuilder = AlertDialog.Builder(this)
    val inflater = this.layoutInflater
    val dialogView = inflater.inflate(R.layout.custom_dialog, null)
    dialogBuilder.setView(dialogView)

    val editText = dialogView.findViewById<View>(R.id.editTextName) as EditText

    dialogBuilder.setTitle("Dialog Title")
    dialogBuilder.setMessage("Dialog Message")
    dialogBuilder.setPositiveButton("OK", DialogInterface.OnClickListener { dialog, whichButton ->
        //get what you need here!
    })
    dialogBuilder.setPositiveButton("Cancel", DialogInterface.OnClickListener { dialog, whichButton ->
        //get what you need here!
    })
    val b = dialogBuilder.create()
    b.show()
}
...