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>
在我们创建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>
相关文章推荐
- AlertDialog通过反射机制阻止Dialog关闭
- AlertDialog通过反射机制阻止Dialog关闭
- AlertDialog通过反射机制阻止Dialog关闭
- AlertDialog通过反射机制阻止Dialog关闭
- Android中利用反射机制来控制AlertDialog窗口不被关闭
- Android系统原理与源码分析(1):利用Java反射技术阻止通过按钮关闭对话框
- Android系统原理与源码分析(1):利用Java反射技术阻止通过按钮关闭对话框
- 安卓_利用Java反射技术阻止通过按钮关闭对话框
- 关于Android中利用java反射阻止dialog的关闭问题
- 【转】Android系统原理与源码分析:利用Java反射技术阻止通过按钮关闭对话框
- Android系统原理与源码分析(1):利用Java反射技术阻止通过按钮关闭对话框
- Android系统原理与源码分析(1):利用Java反射技术阻止通过按钮关闭对话框
- Android系统原理与源码分析(1):利用Java反射技术阻止通过按钮关闭对话框
- Android系统原理与源码分析(1):利用Java反射技术阻止通过按钮关闭对话框
- Android系统原理与源码分析(1):利用Java反射技术阻止通过按钮关闭对话框
- Android系统原理与源码分析(1):利用Java反射技术阻止通过按钮关闭对话框
- Android系统原理与源码分析(1):利用Java反射技术阻止通过按钮关闭对话框
- Android系统原理与源码分析(1):利用Java反射技术阻止通过按钮关闭对话框
- Android系统原理与源码分析(1):利用Java反射技术阻止通过按钮关闭对话框
- Android系统原理与源码分析(1):利用Java反射技术阻止通过按钮关闭对话框