Android AlertDialog这是一个bug吗?
我的应用程序创建一个AlertDialog,用户在其中输入要保存的名称。当用户单击save按钮时,onClickListener将检查重复的名称。如果名称已存在,则会弹出另一个对话框,提醒用户现有数据将被替换。然后,用户可以选择取消并返回以更改为新名称,或者继续并替换数据。Android AlertDialog这是一个bug吗?,android,Android,我的应用程序创建一个AlertDialog,用户在其中输入要保存的名称。当用户单击save按钮时,onClickListener将检查重复的名称。如果名称已存在,则会弹出另一个对话框,提醒用户现有数据将被替换。然后,用户可以选择取消并返回以更改为新名称,或者继续并替换数据。 当第二个对话框出现时,我希望第一个对话框在我调用Disclease之前仍然可见。但是,第一个AlertDialog在第二个AlertDialog出现之前消失。也就是说,单击按钮时将自动调用Disclose。这是一个bug还是
当第二个对话框出现时,我希望第一个对话框在我调用Disclease之前仍然可见。但是,第一个AlertDialog在第二个AlertDialog出现之前消失。也就是说,单击按钮时将自动调用Disclose。这是一个bug还是设计的?
我在下面写了一个测试用例,检查了3台设备:Nexus S安卓4.0、HTC Rezound安卓2.3和摩托罗拉Droid仿生安卓2.3 布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/message"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Some message will be here"
/>
<Button
android:id="@+id/show_btn"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Show"
/>
</LinearLayout>
我最初使用android:theme=“@android:style/theme.dialog”将对话框另存为活动。Nexus S和Rezound上的UI看起来不错,但Droid仿生上的UI看起来很糟糕(编辑框和按钮只占了一半的宽度,另一半是空白)。不是一个bug-在这种情况下,只提供了onClick(),以便您可以在单击按钮时更新UI/采取行动
如果要在单击“确定”按钮时保持对话框,可以尝试使用“确定/取消”按钮创建具有透明背景的自定义活动。不是错误-在这种情况下,只提供了onClick(),以便在单击按钮时更新UI/采取行动 如果您希望在单击“确定”按钮时保持对话框,可以尝试使用“确定/取消”按钮创建具有透明背景的自定义活动。这是出于设计。 如果您不想通过单击按钮取消对话框,下面是一些代码。 当您不想取消该对话框时,将其添加到setPositiveButton方法中
try {
Field field = dialog.getClass().getSuperclass().getDeclaredField("mShowing");
field.setAccessible(true);
field.set(dialog, false);
} catch (Exception e) {
e.printStackTrace();
}
如果你想取消这个对话框,只需要在下面添加这个
try {
Field field = dialog.getClass().getSuperclass().getDeclaredField("mShowing");
field.setAccessible(true);
field.set(dialog, true);
} catch (Exception e) {
e.printStackTrace();
}
顺便说一下,您的警报对话框永远不会调用xml。因为setTitle()和setMessage方法是由alert对话框提供的
如果要提供自定义对话框,请调用setCustomeView(布局)
如果有任何问题,请告诉我 这是设计的。
如果您不想通过单击按钮取消对话框,下面是一些代码。
当您不想取消该对话框时,将其添加到setPositiveButton方法中
try {
Field field = dialog.getClass().getSuperclass().getDeclaredField("mShowing");
field.setAccessible(true);
field.set(dialog, false);
} catch (Exception e) {
e.printStackTrace();
}
如果你想取消这个对话框,只需要在下面添加这个
try {
Field field = dialog.getClass().getSuperclass().getDeclaredField("mShowing");
field.setAccessible(true);
field.set(dialog, true);
} catch (Exception e) {
e.printStackTrace();
}
顺便说一下,您的警报对话框永远不会调用xml。因为setTitle()和setMessage方法是由alert对话框提供的
如果要提供自定义对话框,请调用setCustomeView(布局)
如果有任何问题,请告诉我 我确实将“保存”对话框编写为“活动”。我想我必须回到布局,看看我做错了什么,这让机器人仿生看起来很奇怪。无论如何,如果是设计的,那么在onClick中调用dismise是多余的,不是吗?正确,您不应该从侦听器调用dismise。如果用户在显示对话框时点击“后退”按钮,onDismiss可能会被单独调用。我想我必须回到布局,看看我做错了什么,这让机器人仿生看起来很奇怪。无论如何,如果是设计的,那么在onClick中调用dismise是多余的,不是吗?正确,您不应该从侦听器调用dismise。如果用户在显示对话框时点击“后退”按钮,onDismiss可能会被单独调用。谢谢,这很有效,可以避免我重写我的应用程序。上面的布局用于“活动而非警报”对话框。我的投票被拒绝,因为我没有足够的声誉,否则你会得到2票。谢谢你,这是有效的,它让我免于重写我的应用程序。上面的布局用于“活动而非警报”对话框。我的投票被否决了,因为我没有足够的声誉,否则你会得到2票。