似乎没有简单的方法来获取一个Alert对话框来返回一个简单的值.
该代码不起作用(答案变量无法从侦听器中设置,实际上甚至不能编译)
该代码不起作用(答案变量无法从侦听器中设置,实际上甚至不能编译)
public static boolean Confirm(Context context) { boolean answer; AlertDialog dialog = new AlertDialog.Builder(context).create(); dialog.setTitle("Confirmation"); dialog.setMessage("Choose Yes or No"); dialog.setCancelable(false); dialog.setButton(DialogInterface.BUTTON_POSITIVE,"Yes",new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog,int buttonId) { answer = true; } }); dialog.setButton(DialogInterface.BUTTON_NEGATIVE,"No",int buttonId) { answer = false; } }); dialog.setIcon(android.R.drawable.ic_dialog_alert); dialog.show(); return answer; }
注意:重要的是该方法是自包含的,即它不依赖于外部的变量或构造.只要打电话给你,得到你的答案,是真的还是假的.
那么该怎么办?这种简单的返回真假愿望似乎比它应得的要复杂得多.
此外,setButton方法的格式如下:
dialog.setButton(int buttonId,String buttonText,Message msg)
但是不清楚如何使用它,meesage发送到哪里,使用哪个处理程序给谁?
解决方法
我在这个论坛上有类似的问题,但是我终于得到了我的答案.
我在那篇文章中的问题是如何创建单独的确认对话框类,他可以通过其他类或活动来访问,所以使用该确认对话框类,我们不需要编写长编码.
我在那篇文章中的问题是如何创建单独的确认对话框类,他可以通过其他类或活动来访问,所以使用该确认对话框类,我们不需要编写长编码.
这是我的答案.
首先你必须创建DialogHandler.java
import android.app.Activity; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import src.app.R; public class DialogHandler { public Runnable ans_true = null; public Runnable ans_false = null; // Dialog. -------------------------------------------------------------- public boolean Confirm(Activity act,String Title,String ConfirmText,String CancelBtn,String OkBtn,Runnable aProcedure,Runnable bProcedure) { ans_true = aProcedure; ans_false= bProcedure; AlertDialog dialog = new AlertDialog.Builder(act).create(); dialog.setTitle(Title); dialog.setMessage(ConfirmText); dialog.setCancelable(false); dialog.setButton(DialogInterface.BUTTON_POSITIVE,OkBtn,new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog,int buttonId) { ans_true.run(); } }); dialog.setButton(DialogInterface.BUTTON_NEGATIVE,CancelBtn,int buttonId) { ans_false.run(); } }); dialog.setIcon(android.R.drawable.ic_dialog_alert); dialog.show(); return true; } }
这就是将其称为另一个类的例子
public class YourActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); findViewById(R.id.button1).setOnClickListener(myclick); } public final Button.OnClickListener myclick = new Button.OnClickListener() { @Override public void onClick(View v) { doclick(); } }; public void doclick() { DialogHandler appdialog = new DialogHandler(); appdialog.Confirm(this,"Message title","Message content","Cancel","OK",aproc(),bproc()); } public Runnable aproc(){ return new Runnable() { public void run() { Log.d("Test","This from A proc"); } }; } public Runnable bproc(){ return new Runnable() { public void run() { Log.d("Test","This from B proc"); } }; } }