gpt4 book ai didi

android - AlertDialog 这是一个错误吗?

转载 作者:行者123 更新时间:2023-11-29 16:14:19 24 4
gpt4 key购买 nike

我的应用创建了一个 AlertDialog,用户可以在其中输入要保存的名称。当用户单击保存按钮时,onClickListener 将检查重复的名称。如果该名称已经存在,将弹出另一个对话框提醒用户现有数据将被替换。然后,用户可以选择取消并返回更改为新名称,或者继续并替换数据。
当第二个对话框出现时,我希望第一个对话框仍然可见,直到我调用 dismiss。但是,第一个 AlertDialog 在第二个 AlertDialog 出现之前就消失了。即单击按钮时将自动调用 dismiss。这是错误还是设计使然?
我写了下面的测试用例,我在 3 台设备上进行了检查:Nexus S android 4.0、HTC Rezound android 2.3 和 Motorola Droid Bionic android 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>

代码

public class AlertDialogBug extends Activity 
{
static final int DIALOG_ALERT_ID = 1;
AlertDialog alertDlg;
TextView message;

@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);

setContentView(R.layout.main);

message = (TextView) findViewById(R.id.message);
Button showButton = (Button) findViewById(R.id.show_btn);
showButton.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
showDialog(DIALOG_ALERT_ID);
}
});
}

private AlertDialog createAlertDialog()
{
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Bug?");

builder.setPositiveButton("OK", new DialogInterface.OnClickListener()
{

@Override
public void onClick(DialogInterface dialog, int which)
{
// No dismiss, cancel, finish, or removeDialog,
// but the dialog will disappear when this button is clicked.
}

});

alertDlg = builder.create();
alertDlg.setOnDismissListener(new OnDismissListener()
{

@Override
public void onDismiss(DialogInterface dialog)
{
message.setText("onDismiss was called");
}

});

return alertDlg;
}

@Override
protected Dialog onCreateDialog(int id)
{
switch (id)
{
case DIALOG_ALERT_ID:
return createAlertDialog();

default:
return super.onCreateDialog(id);
}
}

}

我最初将保存对话框编写为带有 android:theme="@android:style/Theme.Dialog"的 Activity 。用户界面在 Nexus S 和 Rezound 上看起来不错,但在 Droid Bionic 上看起来很糟糕(编辑框和按钮只占宽度的一半,另一半是空白)。

最佳答案

这是设计使然。如果您不想通过单击按钮取消对话框,下面是一些适合您的代码。当您不想取消对话框时,将此添加到您的 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 方法由警报对话框提供。

如果你想提供自定义对话框,调用setCustomeView(layout)。

有任何问题,请告诉我。

关于android - AlertDialog 这是一个错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10669948/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com