有时候希望给对话框中的内容做验证,希望在验证错误时不能让对话框消失,但是在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();
}
}
}