2017-01-04 20 views
1

我已經創建了一個自定義android.support.v7.app.AlertDialog.Builder,而不是使用集合的正面和負面按鈕我已經通過xml設計了一個自定義佈局(具有確定和取消按鈕)並將其分配給自定義android.support.v7.app.AlertDialog.Builder如何關閉自定義android.support.v7.app.AlertDialog.Builder?

我已經設置好點擊取消按鈕上的點擊監聽器。我的問題是點擊取消按鈕我已經設置了一個回調主要片段,我想關閉/關閉對話框,但我收到以下異常:

java.lang.IllegalStateException:指定的子項已經有一位家長。您必須先調用子對象的父對象的removeView()。

如何解決這個問題?

這裏是我的代碼:

cancelbutton.setOnClickListener(new View.OnClickListener() { 
@Override 
public void onClick(View v) { 
    Listener.OnCancel(); }}); 
@Override 
public void OnCancel() { 
final android.support.v7.app.AlertDialog dialog = custompopup.show(); 
dialog.cancel()} 

需要注意的是:點擊取消按鈕聽衆是定製類和OnCancel在主片段,並custompopup是自定義類的對象,這個對象是在函數中初始化這是主要片段的一部分。

回答

1

只要檢查Dialog是否已經打開。如果它是開放的,然後關閉它是這樣的:

聲明全局:

android.support.v7.app.AlertDialog dialog; 

顯示對話框:

dialog = custompopup.show(); 

辭退Dialog在您的聽衆是這樣的:

@Override 
public void OnCancel() { 
    if (dialog.isShowing()) { 
    dialog.dismiss(); 
    } 
} 
+0

好的謝謝.... :) – User

1

final android.support.v7.app.AlertDialog dialog = custompopup.show();

在此行之前,您需要關閉先前的對話框。直到你解除前一個之前,你不能創建新的。

試試這個:

dialog.dismiss(); 
final android.support.v7.app.AlertDialog dialog = custompopup.show(); 

onCancel應該是這樣的:

@Override 
public void OnCancel() { 
dialog.cancel() 
if(dialog.isShowing(){ 
    dialog.dismiss(); 
    } 
android.support.v7.app.AlertDialog dialog = custompopup.show(); 
} 
+0

但在你的問題它並沒有被解僱。你直接打電話給新的,你需要解僱前一個。 – Spartan

+0

好的......謝謝 – User

+0

我明白了你的意思 – User

1

你得到的例外,因爲你再次展示了其已經顯示相同的對話框。 你正在做這件事onCancel()

您不需要在系統處理的onCancel中取消/取消對話框。 onCancel只會在用戶取消對話時調用,然後解除對話,不需要手動解除/取消。

+1

好的謝謝...... :) – User