Как вернуться к пользовательскому интерфейсу ввода при вводе пароля ошибки при использовании AlertDialog в Kotlin? - PullRequest
0 голосов
/ 05 июня 2018

Я надеюсь, что при запуске приложения откроется диалоговое окно для ввода пароля.

Если я введу правильный пароль, диалоговое окно закроется и отобразится основной пользовательский интерфейс.

Если я введупароль ошибки, диалоговое окно останется открытым и снова потребует ввода данных пользователем.

Как я могу это сделать?Спасибо!

В настоящее время диалоговое окно всегда закрыто, независимо от того, введен ли правильный пароль или пароль ошибки.

  override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.layout_main)      
        showInputPasswordDialog()
    }  


    private fun showInputPasswordDialog {    
        val editText = EditText(this)
        val inputDialog = AlertDialog.Builder(this)
        inputDialog.setTitle("Input")
                   .setView(editText)
                   .setCancelable(false)
                   .setNegativeButton("Cancel", DialogInterface.OnClickListener { dialog, which ->
                           finish();
                   })

        inputDialog.setPositiveButton("OK",
                DialogInterface.OnClickListener { dialog, which ->
                    val password= editText.text.toString()
                    if (password=="aa"){
                        //close the dialog
                    }else{
                        toast("Password error")
                        //Return for input again
                    }
                }).show()
    }

1 Ответ

0 голосов
/ 05 июня 2018

Если вы обрабатываете прослушиватель onclick для положительной кнопки внутри alertDialog.onShowlistener, тогда вы можете избежать потока закрытия диалогов. Пожалуйста, найдите измененный код ниже.

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.layout_main)      
        showInputPasswordDialog()
    }  


    private fun showInputPasswordDialog {    
        val editText = EditText(this)
        val inputDialog = AlertDialog.Builder(this)
        inputDialog.setTitle("Input")
                   .setView(editText)
                   .setCancelable(false)
                   .setNegativeButton("Cancel", DialogInterface.OnClickListener { dialog, which ->
                           finish();
                   })

        inputDialog.setPositiveButton("OK",null)

       // modified code starts here
        val mAlertDialog = inputDialog.create()

        mAlertDialog.setOnShowListener(DialogInterface.OnShowListener {
        val b = mAlertDialog.getButton(AlertDialog.BUTTON_POSITIVE)
        b.setOnClickListener(View.OnClickListener {

          val password= editText.text.toString()
                if (password=="aa"){
                    mAlertDialog.dismiss();
                    //close the dialog
                }else{
                    toast("Password error")
                    //Return for input again
                }

        })
    })

    mAlertDialog.show() 

    }

ref: Как предотвратитьдиалоговое окно закрывается при нажатии кнопки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...