2016-07-09 8 views
0

カスタム確認ダイアログの「結果」を取得する際に問題が発生しました。
私は次のクラス建て:確認ダイアログでどのボタンがクリックされたか

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

そしてMainActivityからそれを呼び出す:

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

をしかし、それは私がタップしたボタンは関係ありません、私は常に[はい]ボタンがあったとの結果を得ますクリックした

答えて

-1

show()メソッドは警告を非同期的に表示するため、showConfirmDialog()メソッドは、いずれかのボタンをタップして変更する前に常にOK値を返します。これはあなたが例えばonClick()方法

で別のボタンの動作を扱うことができないようにするに :

@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

私はあなたがそうあなたが小さな例を与えることができますしてください何を意味するかわからないんだけど? – altralaser

+0

あなたの例では、ボタンをクリックして実行するコードを知る必要があります。しかし、私のアプリケーションでは、異なる状況で異なるアクティビティからの確認ダイアログを呼びたいと思っています。では、ボタンハンドラは何を実行するのかを知っていますか? – altralaser

+0

@altralaser特定の実装では、たとえば、さまざまなリスナーを実装し、必要に応じてそれらをビルダーに渡すことができます。しかし、より固いアプローチが必要な場合は、ここで解決策を見てください:http://stackoverflow.com/questions/23408756/create-a-general-class-for-custom-dialog-in-java-android –

関連する問題