我有一种在片段中创建警报对话框的方法
private void alertDialog() {
final EditText editTextField = new EditText(this.getContext());
AlertDialog dialog = new AlertDialog.Builder()
.setTitle("Title")
.setMessage("Message")
.setView(editTextField)
.setPositiveButton("OK", this)
.setNegativeButton("Cancel", null)
.create();
dialog.show();
}
然后我实现了DialogInterface.OnClickListener
public void onClick(DialogInterface dialogInterface, int i){
switch(i){
case DialogInterface.BUTTON_POSITIVE:
String name = String.valueOf(editTextField.getText());
break;
case DialogInterface.BUTTON_NEGATIVE:
break;
}
}
但是,editTextField
中的onClick
无法引用“警报对话框”。反正有解决办法吗?还是唯一的方法是使用编辑文本和setView
进入警报对话框生成器来创建布局?
答案 0 :(得分:1)
在 Kotlin 上也一样:
val inputEditTextField = EditText(requireActivity())
val dialog = AlertDialog.Builder(requireContext())
.setTitle("Title")
.setMessage("Message")
.setView(inputEditTextField)
.setPositiveButton("OK") { _, _ ->
val editTextInput = inputEditTextField .text.toString()
Timber.d("editext value is: $editTextInput")
}
.setNegativeButton("Cancel", null)
.create()
dialog.show()
答案 1 :(得分:0)
您无法访问editTextField的原因是因为它在alertDialog()方法中被声明为局部变量。
如果要将该变量保留为局部变量,则需要直接在该方法中设置侦听器方法,如下所示。
private EditText = new EditText(this);
AlertDialog dialog = new AlertDialog.Builder(this)
.setTitle("Title")
.setMessage("Message")
.setView(inputEditTextField)
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
String editTextInput = inputEditTextField.getText().toString();
Log.d("onclick","editext value is: "+ editTextInput);
}
})
.setNegativeButton("Cancel", null)
.create();
dialog.show();
否则,您可以将alertDialog()方法中的该行替换为下面的这一行
editTextField = new EditText(this.getContext());
您需要在onCreate方法上方添加此行
EditTextField editTextField;