AlertDialog通过发射机制阻止Dialog关闭

本文介绍如何在Android开发中利用反射机制阻止Dialog在用户未输入登录信息时关闭,并通过Toast提示用户需要输入登录信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在开发Android应用程序时,我们可能会用到需要用户输入的Dialog,如登录对话框等。这时候,如果用户没有输入登录信息而点击<确定>按钮时,我们并不希望登录Dialog消失,而是采用一个Toast提示用户没有输入登录信息。在这里,我就向大家介绍下Dialog通过反射机制阻止Dialog关闭。

在我们创建Dialog时,在Dialog的按钮点击事件处理中做如下处理

LayoutInflater inflater = LayoutInflater.from(this);
final View textEntryView = inflater.inflate(
		R.layout.f_alert_dialog_takeeffect, null);
AlertDialog.Builder builder = new AlertDialog.Builder(context);
		builder.setIcon(android.R.drawable.ic_dialog_alert);
		builder.setView(textEntryView);
		builder.setTitle(profileSettingList[settingId]);
		//确定按钮点击事件处理
		builder.setPositiveButton(R.string.btn_OK,
				new DialogInterface.OnClickListener() {
				public void onClick(DialogInterface dialog, int whichButton) {
						Field field = null;
						try {
							//通过反射获取dialog中的私有属性mShowing
							field = dialog.getClass().getSuperclass()
									.getDeclaredField("mShowing");
							field.setAccessible(true);//设置该属性可以访问
						} catch (Exception e) {
							
						}
						EditText message_edit = (EditText) textEntryView
								.findViewById(R.id.usermessage_edit);
						String message = String.valueOf(message_edit.getText());
						if (null == message || "".equals(message)) {
							try {
								//输入框中内容为空,dialog不关闭
								field.set(dialog, false);
								dialog.dismiss();
							} catch (Exception e) {
							}
							//提示用户输入登录信息
							Toast.makeText(getApplicationContext(),
										R.string.pleaseenter_message,
										Toast.LENGTH_LONG).show();
						} else {
							try {
								//可以关闭
								field.set(dialog, true);
								dialog.dismiss();
							} catch (Exception e) {
							}
							//登录业务处理


 
 

 
 
 
 

                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值