2017-01-04 4 views
1

私はカスタムandroid.support.v7.app.AlertDialog.Builderを作成しました。設定されたポジティブとネガティブのボタンを使用する代わりに、xml(okとキャンセルボタン)からカスタムレイアウトを設計し、カスタムandroid.support.v7.app.AlertDialog.Builderに割り当てました。閉じる方法カスタムandroid.support.v7.app.AlertDialog.Builder?

私はokボタンとキャンセルボタンでクリックリスナーに設定しました。

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

関連する問題