2013-07-27 27 views
5

ほとんどの状況で、何度も選択する必要があります(何かを行い、選択肢を作って他のことを続けるメッセージボックスを表示しますそれは正しく、ユーザーのアクションを応答が、常に私はボタンをクリックしながら、それが意味(保留が)) は、だから私は、前のアクションの値が があります)グローバル変数の値で表示されている一般的な機能AlertDialogの戻り値の使用方法

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



} 

答えて

7

私はあなたのダイアログための時間によってalertDialog

このような
int ret = ShowMsgDialog(Context self,String title, String msg); 

から値を取得する方法はないと思いますあなたのボタンのonClick()が既に終了していることが示されます。

だから私はこれを実装する別の方法を使用することをお勧めします。このような

public void userChose(String choise){ 

     if(choice == Answer.YES) 
      //YOUR CODE FOR YES HERE 
      Toast.makeText(MainActivity.this, "YOU CHOSE YES", Toast.LENGTH_LONG).show(); 
     else if (choice == Answer.NO) 
      //YOUR CODE FOR NO HERE 
      Toast.makeText(MainActivity.this, "YOU CHOSE NO", Toast.LENGTH_LONG).show(); 

} 

とのonClick(であなたのメソッドを呼び出す)

alertDialogを作成するための方法は、それは以下のようなあなたの活動の関数を作成するのと同じくらい簡単です、あなたの活動の中にあるので、 :

 dlgAlert.setPositiveButton("OK",new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int whichButton) { 
       userChose(Answer.YES); 
      } 
     }); 
     dlgAlert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       userChose(Answer.NO); 
      } 
     }); 
+0

別の関数で、私は、関数の戻り値を使用します値。グローバル変数を使用する場合、関数呼び出しが応答変数の値を作った – George

+0

の値がわからない場合は、 – George

+0

私はあなたが良いことを理解することができません、あなたはそれを良く書くことができますか? :S、しかし、私は戻り値を取得する唯一の有効なソリューションは、AlertDialogを表示すると、ダイアログが閉じられるときに通知する方法がないため、あなたのニーズに応じてUIを更新する別の関数を呼び出すことであると信じていますUIスレッドを一時停止してalertDialogの値が返されるまで待つことはできません。だから私の例のようなものを使う必要があります。 – ManosProm

0

ポジティブおよびネガティブボタンのクリックイベントでトーストを表示する必要があります。ボタンをクリックすると警告が表示され、その後に条件が実行されると、最後に開いたalertviewボタンのクリックからの価値があるためです。それは間違っている。この方法を試してください。

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

メッセージをトーストするのはサンプルですが、代わりに他のコードを使用しています。つまり、AlertDialogの戻り値を使用するだけです。 – George

+0

alertbutton clickの戻り値をクリックせずに取得することはできません。アラートボタンのクリックで何かをする必要があります。アラートボタンの値でボタンのクリックで任意の関数を呼び出します。 –

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; 
} 
関連する問題