android 手动设置对话框能否消失

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

猜你喜欢

转载自vocaloid.iteye.com/blog/1682939