我必须在按钮上单击两次(any:积极、中性和消极),它才能关闭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
谢谢
发布于 2018-05-21 12:17:14
@Said :我复制了你的代码,它工作得很好,只需要一次点击关闭正面或负面按钮,所以我相信问题不在这一部分。
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()
}
发布于 2018-05-20 06:11:15
不要为get定义单击时事件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()
}
发布于 2018-05-21 04:36:39
当您单击任何按钮时,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
在kotlin中是多余的。
https://stackoverflow.com/questions/50429807
复制相似问题