有时候希望给对话框中的内容做验证,希望在验证错误时不能让对话框消失,但是在android dialog中,只要点击确认和返回就会自动关闭对话框,十分头疼。。。。
经过查阅网络资料,看到http://shufeipenglove-163-com.iteye.com/blog/1274977的这位大牛给出了用反射控制的方法,于是自己修改后的代码如下,基本没改什么,只是为了以后查阅方便哈。
package com.example.android_dialog_test; import java.lang.reflect.Field; import android.os.Bundle; import android.app.Activity; import android.app.AlertDialog.Builder; import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; import android.view.Menu; import android.widget.EditText; public class MainActivity extends Activity { EditText input; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); input = new EditText(this); Builder builder = new Builder(this); builder.setPositiveButton("check", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // 不关闭 setClosable(dialog, false); if ((input.getText().toString()).equals("123")) { // 关闭对话框 setClosable(dialog, true); dialog.dismiss(); }else{ input.setText("输入错误!"); } } }).setView(input) .setNegativeButton("cancel", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { setClosable(dialog, true); dialog.dismiss(); } }).create().show(); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main, menu); return true; } private void setClosable(DialogInterface dialog, boolean b) { try { Field field = dialog.getClass().getSuperclass() .getDeclaredField("mShowing"); field.setAccessible(true); field.set(dialog, b); } catch (Exception e) { e.printStackTrace(); } } }