2011-11-01 35 views
4

我在我的应用程序上有一个小问题AlertDialog。我正在显示AlertDialog,因此用户可以更改他刚按下的按钮的文本。当我第一次这样做的时候没有问题,但是如果我再次按下按钮,我的应用程序会在标题中出现Exception异常。下面是我使用的代码:Android AlertDialog指定的孩子已经有一个父异常

public void createDialog(){ 
    new AlertDialog.Builder(Settings.this) 
    .setTitle("Stampii Server Name") 
    .setView(input) 
    .setPositiveButton("Set Name", new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int which) { 
      String serverName = input.getText().toString(); 
      server.setText(serverName); 
     } 
    }) 
    .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int which) { 
      dialog.cancel(); 
     } 
    }).show(); 
} 


server.setOnClickListener(new View.OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     createDialog(); 
    } 
}); 

任何想法如何解决这个问题?我已经看过类似的问题,但找不到可行的解决方案。

在此先感谢!

+1

检查它在CreateDialog方法中崩溃的哪一行.. – Udaykiran

+1

在该行上:'})。show();' –

回答

7
.setView(input) 

变量“输入”未在方法创建和被添加到新的对话框的每一次。这意味着,每次调用create方法时,都试图向同一个对象添加一个新父项。每次创建对话框时都需要一个新的“输入”,或者一次又一次地使用相同的对话框。

+1

我忘记了'EditText'。非常感谢! –

+0

没问题。我很乐意提供帮助。 – NotACleverMan

1

我曾经有过类似的问题。我使用的ShowDialog(INT ID,捆绑参数)和实施

protected Dialog onCreateDialog(int id,Bundle args) 
{ 
    switch(id) 
    { 
    case ...: 
     AlertDialog.Builder builder = new AlertDialog.Builder(this); 
     builder.setPositive... 
     return builder.create(); 
    } 
} 

我的错误是,我不得不创建一个新的对话框,因为Android是莫名其妙缓存对话框之前使用removeDialog(INT ID)和不调用onCreateDialog()每次调用showDialog()。 所以我的解决办法是调用

removeDialog(id); 
showDialog(id,args); 

和开关语句之前移除所有可能的对话,以避免与任何其他缓存对话框冲突修改onCreateDialog()。

相关问题