您的位置:首页 > 其它

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

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

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

[java] view
plaincopy

<pre name="code" class="java"><pre name="code" class="java">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) {

}

//登录业务处理</pre><br>

<br>

<pre></pre>

<pre></pre>

<p></p>

<p></p>

<pre></pre>

<pre></pre>

<pre></pre>

<pre></pre>

<pre></pre>

<pre></pre>

<pre></pre>

</pre>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐