2012-01-31 58 views
4

我尝试创建AlertDialog。它工作,但setMessage不刷新消息。下面的代码片段:onCreateDialog不刷新信息

@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,该消息是一样的。 我在做什么错?请帮帮我。

回答

2

在documenation为protected Dialog onCreateDialog (int id, Bundle args)它说:

如果使用showDialog(int),活动将通过第一次调用此方法,然后挂到它。任何由此方法创建的对话框都会自动保存并为您恢复,包括是否显示。

如果您希望为您管理保存和恢复对话框的活动,您应该重写此方法并处理传递给showDialog(int)的任何ID。

所以它看起来只会创建一个对话框,然后android会保存/恢复它。

+0

他们应该强调“活动只会第一次调用这个方法”,我总是发现他们的文档很混乱。 xD – GMsoF 2012-11-01 06:45:38

10

您需要使用'onPrepareDialog'重置每次显示对话框时都会更改的信息。 onCreateDialog只被调用一次,然后对话框保持并重新使用。每次显示对话框时调用onPrepareDialog

当然,onCreateDialog和onPrepareDialog都被弃用,你应该使用'DialogFragment'类和'FragmentManager'来代替。但是如果你(像我)继续使用旧的API,那么onPrepareDialog就是你想要的。

+0

我已经试过了!我从onCreateDialog除去setMessage和放置在此一进onPrepareDialog象下面这样:@覆盖 \t保护无效onPrepareDialog(INT ID,对话的对话){ \t开关(ID){ \t情况CONFIRM: \t((AlertDialog)对话) .setMessage(infoMsg); \t \t break; \t} \t}但它还没有工作。 – Nolesh 2012-01-31 14:34:32

2

我有同样的问题,请致电removeDialogDialog

1

,最好不要使用做到无论onCreateDialog()创建Diaog然后用onPrepareDialog()任何茶点或数据的更新时Dialog再次clicked.For这些方法后,您对Dialog没有太多控制权,并且会增加您的代码复杂性和冗长,并且通常很难理解。为此,您可以在xml中创建自己的自定义布局,并在对话框中将其显示出来。只需编写一个方法即可。无需编写onPrepareDialog()来刷新数据。 这里是定制Dialog的简单例子。

这里您的对话框包含一个带按钮名称的输入文本框ok取消

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

使用这种方法的任何地方作为一个对话那么简单。