在大多数情况下,我需要用户多次作出选择(我做了一些事情并为用户提出一个消息框以供选择并继续做其他事情(也许称为块)) 所以我写了一个共同的功能如何使用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();
}
}
在不同的功能,我打算用函数的返回值。如果使用全局变量,那么我不知道 – George
哪个函数调用的值取得了答案变量的值,我不知道 – George
我不明白你的意思是抱歉,你能写得更好吗? :S,但我相信获得返回值的唯一有效解决方案是调用另一个函数,它将根据您的需要更新您的UI,因为当您显示AlertDialog时,无法确定何时会关闭对话框从用户,你不能只是暂停UI线程,并等待,直到从alertDialog返回值。所以你需要使用像我的例子。 – ManosProm