我正在尝试在 AlertDialog 的 OnShowListener 中复制单击事件,该事件在 Java 中运行良好,以防止 AlertDialog 在按下 BUTTON_POSITIVE 时关闭这是我在 Java 中的代码:
AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
View view = getLayoutInflater().inflate(R.layout.dialog_password_confirm, null);
builder.setView(view);
AlertDialog dialog = builder.setPositiveButton(getString(R.string.text_ok)+"", null)
.create();
dialog.setTitle("Acceso Supervisor");
dialog.setCancelable(false);
final EditText editPass = view.findViewById(R.id.edit_password_passwordconfirm);
dialog.setOnShowListener(new DialogInterface.OnShowListener() {
@Override
public void onShow(final DialogInterface dialog) {
Button btnAceptar = ((AlertDialog) dialog).getButton(DialogInterface.BUTTON_POSITIVE);
btnAceptar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String pass = editPass.getText().toString().trim();
if (pass == null || pass.equals("")){
Toast.makeText(getContext(), "Ingresa una contraseña valida", Toast.LENGTH_SHORT).show();
} else {
if (UsuarioModel.verifySupervisorPassword(getContext(), pass)){
dialog.dismiss();
InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(editPass.getWindowToken(), 0);
Intent intent = new Intent(getContext(), ResumenDocActivity.class);
startActivity(intent);
} else {
Toast.makeText(getContext(), "Oops! contraseña incorrecta", Toast.LENGTH_SHORT).show();
}
}
}
});
}
});
dialog.setButton(DialogInterface.BUTTON_NEUTRAL,getString(R.string.text_cancel) + "", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(editPass.getWindowToken(), 0);
}
});
dialog.show();
editPass.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
editPass.post(new Runnable() {
@Override
public void run() {
InputMethodManager inputMethodManager= (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
inputMethodManager.showSoftInput(editPass, InputMethodManager.SHOW_IMPLICIT);
}
});
}
});
editPass.requestFocus();
Java中的这段代码运行良好,即使输入错误的密码也不会关闭AlertDialog,但无法在Kotlin中复制它,这是我的代码:
val builder: AlertDialog.Builder = AlertDialog.Builder(context!!)
val view = layoutInflater.inflate(R.layout.dialog_password_confirm, null)
var editPass = view.findViewById<EditText>(R.id.edit_password_passwordconfirm);
val dialog: AlertDialog = builder.setView(view)
.setPositiveButton(getString(R.string.text_ok),null)
.create()
dialog.setTitle("Acceso Supervisor")
var btnOk = dialog?.getButton(AlertDialog.BUTTON_POSITIVE)
dialog.setOnShowListener(object: DialogInterface.OnShowListener{
override fun onShow(dialog: DialogInterface?) {
var btnOk1 = dialog.let{ btnOk }
btnOk1?.setOnClickListener(object : View.OnClickListener{
override fun onClick(v: View?) {
var pass = editPass.getText().toString().trim();
if (pass.equals("")){
Toast.makeText(getContext(), "Ingresa una contraseña valida", Toast.LENGTH_SHORT).show();
} else {
if (UsuarioModel.verifySupervisorPassword(getContext(), pass)){
dialog?.dismiss()
val imm = activity?.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(editPass.windowToken, 0)
var rrf = ReporteRetirosFragment.newInstance()
fragmentManager?.beginTransaction()?.replace(R.id.contenedor_reportes_tpv, rrf)
?.addToBackStack("reporteRetirosTpvFragment")?.commit()
} else {
Toast.makeText(getContext(), "Oops! contraseña incorrecta", Toast.LENGTH_SHORT).show();
}
}
}
})
}
})
dialog.setCanceledOnTouchOutside(false)
dialog.show()
请问有谁知道我在 Kotlin 中有什么问题吗?