2016-07-09 4 views
0

Ich habe ein Problem, das "Ergebnis" eines benutzerdefinierten Bestätigungsdialogs zu erhalten.
baute ich die folgende Klasse:Welche Schaltfläche wurde in einem Bestätigungsdialog angeklickt

public class MessageDialog { 
    private static int result; 

    public static final int OK = 0; 
    public static final int CANCEL = 1; 

    public static int showConfirmDialog(Context context, String message) { 
    result = OK; 

    AlertDialog.Builder ad = new AlertDialog.Builder(context); 
    ad.setCancelable(false); 
    ad.setMessage(message); 
    ad.setTitle("Confirm"); 
    ad.setPositiveButton("Yes", new ButtonPressedListener()); 
    ad.setNegativeButton("No", new ButtonPressedListener()); 
    ad.create().show(); 

    return result; 
    } 

    private static class ButtonPressedListener implements DialogInterface.OnClickListener { 
    @Override 
    public void onClick(DialogInterface dialog, int which) { 
     if (which == DialogInterface.BUTTON_POSITIVE) { 
     result = OK; 
     } else { 
     result = CANCEL; 
     } 
     dialog.dismiss(); 
    } 
    } 
} 

Und es vom MainActivity nennen:

if (MessageDialog.showConfirmDialog(this, "Do you want to delete?") == MessageDialog.OK) { 
    // yes button was clicked 
} else { 
    // no button was clicked 
} 

Aber es ist egal, welche Taste ich tippen, habe ich immer das Ergebnis, dass die Schaltfläche Ja war geklickt.

Antwort

-1

Das ist, weil show() Methode Alarm asynchron zeigt und somit Ihre showConfirmDialog() Methode gibt immer OK Wert, bevor Sie es durch Antippen einer beliebigen Taste ändern können. Um dies zu vermeiden Sie andere Schaltfläche Verhalten in der onClick() Methode

Zum Beispiel handhaben können:

@Override 
public void onClick(DialogInterface dialog, int which) { 
    switch(which) { 
    case DialogInterface.BUTTON_POSITIVE: 
     // yes button behavior 
     break; 
    case DialogInterface.BUTTON_NEGATIVE: 
     // no button behavior 
     break; 
    } 

    dialog.dismiss(); 
} 
+0

Ich bin nicht sicher, was du meinst, so können Sie ein kleines Beispiel geben, bitte? – altralaser

+0

Ok, aber in deinem Beispiel muss ich wissen, welcher Code ausgeführt werden soll, indem ich auf eine Schaltfläche klicke. Aber in meiner Anwendung möchte ich den Bestätigungsdialog von verschiedenen Aktivitäten in verschiedenen Situationen aufrufen. Wie also wissen die Button-Handler, was sie ausführen sollen? – altralaser

+0

@altralaser In Ihrer speziellen Implementierung könnten Sie beispielsweise verschiedene Listener implementieren und diese dann bei Bedarf an den Builder übergeben. Aber wenn Sie solideren Ansatz wollen, werfen Sie einen Blick auf die Lösung hier: http://stackoverflow.com/questions/23408756/create-a-general-class-for-custom-dialog-in-java-android –