8

ほとんどの状況では、ユーザーが何度も選択する必要があります。

public static void ShowMsgDialog(Context self,String title, String msg)

ユーザーのアクションに正しく応答しますが、常に保留中です (つまり、ボタンをクリックしている間、前のアクションの値がグローバル変数の値によって表示されます) メッセージボックスの戻り値を取得して、このように使用できる関数はありますか? :

int ret = ShowMsgDialog(Context self,String title, String msg);

以下は私のコードです:

public class MainActivity extends Activity {
    private Button button1;
    enum Answer { YES, NO, ERROR};
    static Answer choice;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);     
        button1 = (Button)findViewById(R.id.button1);

        button1.setOnClickListener(new OnClickListener() {          
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                ShowMsgDialog(MainActivity.this, "Information", "you choice? "); 
                if(choice == Answer.YES)
                    Toast.makeText(MainActivity.this, "YOU CHOICED YES", Toast.LENGTH_LONG).show();
                else if (choice == Answer.NO)
                    Toast.makeText(MainActivity.this, "YOU CHOICED NO", Toast.LENGTH_LONG).show();
                else
                    Toast.makeText(MainActivity.this, "ERROR OCUS", Toast.LENGTH_LONG).show();

                //int ret = ShowMsgDialog(MainActivity.this, "Information", "you choice? ");  
            }
        });     
    }

    public static void ShowMsgDialog(Context self,String title, String Msg){
        AlertDialog.Builder dlgAlert = new AlertDialog.Builder(self);
        dlgAlert.setTitle(title);
        dlgAlert.setMessage(Msg);
        dlgAlert.setPositiveButton("OK",new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int whichButton) {
                // call your code here
                choice = Answer.YES;
            }
        });
        dlgAlert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                // TODO Auto-generated method stub
                choice = Answer.NO;
            }
        });
        dlgAlert.show();
    }



}
4

3 に答える 3

0

AlertDialog から値を直接返すことはできませんが、アクティビティのハンドラーに回答を送信できます。

public static void ShowMsgDialog(Context self,String title, String Msg){
    AlertDialog.Builder dlgAlert = new AlertDialog.Builder(self);
    dlgAlert.setTitle(title);
    dlgAlert.setMessage(Msg);
    dlgAlert.setPositiveButton("OK",new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int whichButton) {
            // call your code here
            Message msg = Message.obtain();
            msg.arg1 = HandlerMessage.Yes.ordinal();
            mHandler.sendMessage(msg);                
         }
    });
    dlgAlert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            // TODO Auto-generated method stub
            Message msg = Message.obtain();
            msg.arg1 = HandlerMessage.No.ordinal();
            mHandler.sendMessage(msg); 
        }
    });
    dlgAlert.show();
}

enum HandlerMessage
{
    Yes,
    No
}

/** for posting authentication attempts back to UI thread */
private final IncomingHandler mHandler = new IncomingHandler(this);

static class IncomingHandler extends Handler 
{
    private final WeakReference<MainActivity> mActivityWeakReference; 

    IncomingHandler(MainActivity activity) 
    {
        mActivityWeakReference = new WeakReference<MainActivity>(activity);
    }

    @Override
    public void handleMessage(Message msg)
    {
        MainActivity activity = mActivityWeakReference.get();
         if (activity != null) 
         {
             activity.HandleMessage(msg);
         }
    }
}
public void HandleMessage(Message msg)
{
    HandlerMessage handlerMessage = HandlerMessage.values()[msg.arg1];

    switch(handlerMessage){
        case Yes:
                //Do something ...
                break;
            case No:
                //Do something ...
                break;
}
于 2015-07-19T15:19:12.687 に答える
0

ポジティブ ボタンとネガティブ ボタンの Click イベントでトーストを表示する必要があります。ボタンをクリックするとアラートが表示され、その後条件が実行されると、最後に開いたアラートビューボタンのクリックから値が得られるためです。だからそれは間違っています。これを試して:

public static void ShowMsgDialog(Context self,String title, String Msg){
        AlertDialog.Builder dlgAlert = new AlertDialog.Builder(self);
        dlgAlert.setTitle(title);
        dlgAlert.setMessage(Msg);
        dlgAlert.setPositiveButton("OK",new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int whichButton) {
                // call your code here
                choice = Answer.YES;
                Toast.makeText(MainActivity.this, "YOU CHOICED YES", Toast.LENGTH_LONG).show();
            }
        });
        dlgAlert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                // TODO Auto-generated method stub
                choice = Answer.NO;
               Toast.makeText(MainActivity.this, "YOU CHOICED NO", Toast.LENGTH_LONG).show();
            }
        });
        dlgAlert.show();
    }
于 2013-07-27T05:50:45.860 に答える