2011-11-01 36 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()。

相關問題