2017-12-27 40 views
0

Ich erstelle ein benutzerdefiniertes Dialogfeld, das eine Grafik enthält, einige Texte, die ich im laufenden Betrieb mit setMessage() und eine einzige Schaltfläche mit der Bezeichnung "OK" ändern, die gedrückt wird , sollte den Dialog ablehnen und ein wenig Haushalt führen. Mein Code sieht so aus:onClick() Methode in AlertDialog nicht aufgerufen

 // 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(); 

Sehr Standard; tatsächlich hob ich es fast wörtlich aus https://developer.android.com/guide/topics/ui/dialogs.html. Der Dialog wird korrekt angezeigt und wenn ich 'OK' drücke, wird er geschlossen, aber wenn ich einen Haltepunkt bei wdsAlert.dismiss() anlege, wird der Haltepunkt nicht berührt. Jeder hat eine Ahnung was los ist?

+0

Do you h ave irgendeine Fehlermeldung? –

+0

Versuchen Sie, Android Studio neu zu starten. –

Antwort

1

können Sie schreiben dialog.dismiss(); statt wdsAlert.dismiss();

0

die Sie interessieren, wenn Sie Dialog auf Klick- entlassen wollen:

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

Sie brauchen nicht dismiss() auf die Schaltfläche klicken aufzurufen. Das Standardverhalten von AlertDialog. Verwenden Sie es wie folgt und überprüfen Sie.

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(); 

Und wenn Sie nicht Dialog auf onClick von PositiveButton entlassen wollen die müssen Sie sein Verhalten außer Kraft zu setzen. Schauen Sie sich This thread an.

0

Versuchen Sie Ihr Projekt, wenn die breackPoint nicht funktioniert, zu reinigen, aber hier ist mein Dialog die für mich arbeiten:

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); 

und diese Methode für den Dialog:

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

Vielen Dank für Ihre Ich habe jedoch eine Problemumgehung gefunden, bei der kein Klickereignis verarbeitet werden muss.

Und gerade jetzt stolperte ich über die Lösung: An anderer Stelle im Code hatte ich setButton() auf dem Builder aufgerufen, und dies war das Klicken auf den Button, anstatt den Aufruf von setPositiveButton().

0

Sie haben

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(); 

} }); 

nicht

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(); 

    } }); 

zu verwenden, da Sie es als Parameter in onClick Funktion sind vorbei ....

Wenn Sie immer mit solchen geschlagen Fehler Toasts oder Snackbars verwenden, um Fehler zu verfolgen

+0

Sie verstehen nicht. Das Problem ist, dass die onClick() -Methode nie aufgerufen wird, nicht dass der Dialog nicht verschwindet. – FractalBob

Verwandte Themen