2017-12-27 62 views
0

グラフィックを含むカスタムダイアログを作成しています。これは、setMessage()と「OK」というラベルの付いた1つのボタンを押して変更するテキストです。ダイアログを閉じ、いくつかのハウスキーピングを行うべきです。私のコードは次のようになります:AlertDialogのonClick()メソッドが呼び出されない

 // Shows the number of letters correct in the current guess. 
    wdsBuilder = new AlertDialog.Builder(this); 
    inflater = this.getLayoutInflater(); 
    dialogView = inflater.inflate(R.layout.box_dialog3, null); 
    dialogView.setBackgroundColor(Color.TRANSPARENT); 
    alertTextView = (TextView)dialogView.findViewById(R.id.text); 

    wdsBuilder.setView(dialogView).setPositiveButton(getString(R.string.ok), new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int whichButton) { 
      wdsAlert.dismiss(); 
      if (playTimer != null) playTimer.cancel(); 
     } 
    }); 
    wdsAlert = wdsBuilder.create(); 

非常に標準的です。実際には、私はそれをほぼそのままhttps://developer.android.com/guide/topics/ui/dialogs.htmlから持ち上げました。ダイアログが正しく表示され、「OK」を押すと解消されますが、wdsAlert.dismiss()にブレークポイントを設定すると、ブレークポイントにヒットしません。誰でも何が起こっているのかを知っていますか?

+0

エラーメッセージが表示されますか? –

+0

Android Studioを再起動してみてください。 –

答えて

1

あなたがクリック - にダイアログを閉じたい場合は、これを試してみてくださいdialog.dismiss();代わり

0

wdsAlert.dismiss();のを書き込むことができます。

wdsBuilder.setView(dialogView).setPositiveButton(getString(R.string.ok), new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int whichButton) { 
      dialog.dismiss(); 
     } 
    }); 
0

あなたはボタンクリックでdismiss()を呼び出す必要はありません。そのAlertDialogのデフォルト動作です。以下のように使用して確認してください。

AlertDialog.Builder wdsBuilder = new AlertDialog.Builder(this); 
    View dialogView = LayoutInflater.from(this).inflate(R.layout.item_dialog, null); 
    dialogView.setBackgroundColor(Color.TRANSPARENT); 
    TextView alertTextView = (TextView)dialogView.findViewById(R.id.text); 
    wdsBuilder.setView(dialogView).setPositiveButton("Ok", new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int whichButton) { 
      Log.e("Dismiss","called"); 
     } 
    }); 
    AlertDialog wdsAlert = wdsBuilder.create(); 
    wdsAlert.show(); 

また、onClick of PositiveButtonのダイアログを閉じたくない場合は、その動作を無効にする必要があります。 This threadを見てください。

final Dialog dialogAnomalias; 
      dialogAnomalias = new Dialog(MainActivity.this); 
      dialogAnomalias.setContentView(R.layout.content_main); 
      dialogAnomalias.setTitle("Captura"); 
      dialogAnomalias.setCancelable(false); 

      WindowManager.LayoutParams lp = setDialogLayoutParams(dialogAnomalias); 

      lecturaAnomalia = (EditText) dialogAnomalias.findViewById(R.id.etLectura); 
      comentariosAnomalia = (EditText) dialogAnomalias.findViewById(R.id.etObservaciones); 


      Button btnAceptar = (Button) dialogAnomalias.findViewById(R.id.btnAceptar); 
      Button btnCancelar = (Button) dialogAnomalias.findViewById(R.id.btnCancelar); 
      btnAceptar.setOnClickListener(new View.OnClickListener() { 

       public void onClick(View v) { 
       } 
      }); 
      btnCancelar.setOnClickListener(new View.OnClickListener() { 

       public void onClick(View v) { 
        dialogAnomalias.dismiss(); 
       } 
      }); 
      dialogAnomalias.show(); 
      dialogAnomalias.getWindow().setAttributes(lp); 

とダイアログのため、この方法:すべてのあなたのための

public WindowManager.LayoutParams setDialogLayoutParams(Dialog dialog) { 
    WindowManager.LayoutParams lp = new WindowManager.LayoutParams(); 
    lp.copyFrom(dialog.getWindow().getAttributes()); 
    lp.width = WindowManager.LayoutParams.MATCH_PARENT; 
    lp.height = WindowManager.LayoutParams.MATCH_PARENT; 
    return lp; 
} 
0

プロジェクトをきれいにしようとbreackPoint doesntの仕事であれば、しかし、ここでは私のための私のダイアログその仕事です私はクリックイベントの処理を必要としない回避策を見つけました。

ちょうど今、私は解決策を見つけました。コードの他の場所で、ビルダーでsetButton()を呼び出していましたが、これはsetPositiveButton()の呼び出しではなく、ボタンのクリックを捕捉していました。

0

あなたがそのように打た取得している場合あなたはonClickの機能にパラメータとして渡しているので

wdsBuilder.setView(dialogView).setPositiveButton(getString(R.string.ok), new DialogInterface.OnClickListener() { 

@Override public void onClick(DialogInterface dialog, int whichButton) { 

dialog.dismiss(); 

if (playTimer != null) playTimer.cancel(); 

} }); 

ない

wdsBuilder.setView(dialogView).setPositiveButton(getString(R.string.ok), new DialogInterface.OnClickListener() { 

    @Override public void onClick(DialogInterface dialog, int whichButton) { 

    wdsAlert.dismiss(); 

    if (playTimer != null) playTimer.cancel(); 

    } }); 

を使用するように....

を持っていますエラートーストやスナックバーを使用してエラーを追跡する

+0

あなたはわかりません。問題は、onClick()メソッドが呼び出されることはなく、ダイアログは消えないということではありません。 – FractalBob

関連する問題