onCreateDialog不刷新消息

时间:2012-01-31 13:34:41

标签: android

我尝试创建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时,消息是相同的。 我究竟做错了什么?求你帮帮我。

4 个答案:

答案 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();
}

使用此方法作为对话框的任何地方都很简单。