I have written a function which has a return value of type int,and in this function I need to pop up an AlertDialog with two buttons. When the "Yes" button is clicked,the function return 0,and "No" button return -1.
public int Func(){
final AlertDialog d=new AlertDialog.Builder(mContext).setTitle("Warning").setCancelable(false).setMessage
(alert)
.setPositiveButton("Yes",mListener).setNegativeButton("No",mListener).create();
d.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
d.show();
if(mWhich.getWhich()==-1) //the "yes" button was clicked
return 0;
else //the "no" button was clicked
return -1;
}
mWhich is a class used to record the user choices
private DialogInterface.OnClickListener mListener =
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
mWhich.setWhich(which);
}
};
Now the problem is the code
if(mWhich.getWhich()==-1)
return 0;
else
return -1;
was executed before the user click the yes or no button,how should I do??
As I understood, your code looks similar to
// some code
int result = Func();
DoSmthWithResult(result);
// some code
Your Func
is running on the UI thread, so after you create dialog it continues executing and returns initial value of mWich
. You should call DoSmthWithResult
from onClickListener
instead:
private DialogInterface.OnClickListener mListener = new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
DoSmthWithresult(which == -1 ? 0 : -1);
}
};
Now DoSmthWithResult
will be executed after user pressed "yes" or "no" button.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With