我尝试创建AlertDialog。它工作但setMessage不刷新消息。以下代码段:
@Override
protected Dialog onCreateDialog(int id) {
super.onCreateDialog(id);
switch (id) {
case CONFIRM:
confirmView = new LinearLayout(this);
return new AlertDialog.Builder(this)
.setIcon(android.R.drawable.ic_dialog_info)
.setView(confirmView)
.setCancelable(false)
.setTitle("The WiFi")
.setMessage(infoMsg);
.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
Functionality.StartWiFiManager(ControllerService.this);
}
})
.setNegativeButton("Cancel", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
})
.create();
}
}
调用:
infoMsg = "My message";
showDialog(CONFIRM);
因此,当我更改我的infoMsg并再次调用showDialog时,消息是相同的。 我究竟做错了什么?求你帮帮我。
答案 0 :(得分:10)
您需要使用'onPrepareDialog'来重置每次显示对话框时更改的信息。 onCreateDialog仅被调用一次,然后保持对话并重新使用。每次显示对话框时都会调用onPrepareDialog。
当然,onCreateDialog和onPrepareDialog都已弃用,你应该使用'DialogFragment'类和'FragmentManager'代替。但是如果你(像我一样)继续使用旧的API,那么onPrepareDialog就是你想要的。
答案 1 :(得分:2)
在protected Dialog onCreateDialog (int id, Bundle args)
的文件中,它说:
如果您使用
showDialog(int)
,活动将首次调用此方法,然后再挂起。将自动保存并恢复此方法创建的任何对话框,包括是否显示。如果您希望活动为您管理保存和恢复对话框,则应覆盖此方法并处理传递给
showDialog(int)
的任何ID。
所以它看起来只会创建一个对话框,之后android会保存/恢复它。
答案 2 :(得分:2)
我遇到了同样的问题,请在完成removeDialog
Dialog
答案 3 :(得分:1)
最好不要使用onCreateDialog()
创建Diaog
,然后再次点击onPrepareDialog()
时使用Dialog
进行任何更新或更新数据。对于这些方法,你没有太多控制你的Dialog
,它会增加你的代码复杂性和冗长,通常很难理解。为此,您可以在xml
中创建自己的自定义布局,并在对话框中使用Diaplay。只需要编写方法。无需编写onPrepareDialog()
来刷新数据。
这是自定义Dialog
的简单示例。
此处您的对话框包含一个输入文本字段,其按键名称为确定,取消。
mydialog.xml
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/linearLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<EditText
android:id="@+id/myInput"
android:layout_width="fill_parent"
android:layout_height="warp_content"/>
<Button
android:id="@+id/okButton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="OK"/>
<Button
android:id="@+id/cancelButton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="cancel"/>
</LinearLayout>
然后你必须只写你的对话方法
AlertDialog dialog;
public void myDialog(){
AlertDialog.Builder builder=new AlertDialog.Builder(this);
builder.setTitle("Dialog Demo");
LayoutInflater inflater=getLAyoutInflater();
final View dialogView=inflater.inflate(R.layout.myDialog,null);
builder.setView(dialogView);
dialog=builder.create();
dialog.show();
}
使用此方法作为对话框的任何地方都很简单。