我使用Alert Dialog准备了AsyncTask,其中有Yes / No按钮。我需要返回1表示是,0表示否。 我完全不了解AsyncTask。如何增加点击等待时间?当前状态不等待
CODE CLASS:
class MyTask extends AsyncTask<Void,Integer,Integer> {
TextView ozn_=null;
AlertDialog dialog=null;
AlertDialog.Builder builder=null;
ImageView icon=null;
int ret=0;
public int getRetValue(){
return ret;
}
public MyTask(int a){
ret=a;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
ozn_ = new TextView(LoginActivity.this);
AlertDialog.Builder builder = new AlertDialog.Builder(LoginActivity.this);
ImageView icon = new ImageView(LoginActivity.this);
icon.setBackgroundResource(R.drawable.warn);
builder.setMessage("oznam");
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(set_dp(60), set_dp(60));
icon.setLayoutParams(params);
ozn_.setGravity(Gravity.LEFT);
LinearLayout l1 = new LinearLayout(LoginActivity.this);
l1.setPadding(set_dp(12), set_dp(12), set_dp(12), set_dp(20));
l1.setOrientation(LinearLayout.HORIZONTAL);
l1.setGravity(Gravity.CENTER_VERTICAL);
ozn_.setPadding(set_dp(12), 0, 0, 0);
l1.addView(icon);
l1.addView(ozn_);
builder.setView(l1);
builder.setPositiveButton("Áno", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
publishProgress(11); //somewhere here is needed control of wait
getResources().notifyAll();
dialog.dismiss();
}
});
builder.setNegativeButton("Nie", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
publishProgress(222); //somewhere here is needed control of wait
getResources().notifyAll();
dialog.dismiss();
}
});
dialog = builder.create();
dialog.setOnShowListener(new DialogInterface.OnShowListener() {
@Override
public void onShow(DialogInterface arg0) {
dialog.getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(0xff00b300);
dialog.getButton(AlertDialog.BUTTON_NEGATIVE).setTextColor(0xffd56300);
}
});
dialog.setCancelable(false); //backbutton
dialog.setCanceledOnTouchOutside(false); //klick outside dialog
dialog.show();
}
@Override
protected Integer doInBackground(Void... rets) {
return ret;
}
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate();
ret++;
}
@Override
protected void onPostExecute(Integer aVoid) {
super.onPostExecute(aVoid);
Toast.makeText(LoginActivity.this, "post"+ret, Toast.LENGTH_SHORT).show();
}
}
活动代码:
a=654; MyTask task=new MyTask(a); task.execute(); a=task.getRetValue();
答案 0 :(得分:2)
解决!
此解决方案正在等待点击事件并返回值。
private boolean resultValue;
public boolean getDialogValueBack(Context context)
{
final Handler handler = new Handler()
{
@Override
public void handleMessage(Message mesg)
{
throw new RuntimeException();
}
};
AlertDialog.Builder alert = new AlertDialog.Builder(context);
alert.setTitle("Title");
alert.setMessage("Message");
alert.setPositiveButton("Return True", new
DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int id)
{
resultValue = true;
handler.sendMessage(handler.obtainMessage());
}
});
alert.setNegativeButton("Return False", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int id)
{
resultValue = false;
handler.sendMessage(handler.obtainMessage());
}
});
alert.show();
try{ Looper.loop(); }
catch(RuntimeException e){}
return resultValue;
}
答案 1 :(得分:0)
我无法理解你的问题。但是Normally Asynctask看起来像这样。在这里,我添加了回调接口以获取结果。如果你有时间试试这个。请...
public class AsyncGet extends AsyncTask<Void, Void, String> {
public interface AsyncGetResponse {
void processFinish(String result);
}
private AsyncGetResponse asyncGetResponse = null;
public AsyncGet(AsyncGetResponse asyncGetResponse) {
this.asyncGetResponse = asyncGetResponse;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
// show progress dialog. If you need
}
@Override
protected String doInBackground(Void... voids) {
String result = null;
// do your background work here. Like API calls.
return result;
}
@Override
protected void onProgressUpdate(Void... values) {
super.onProgressUpdate(values);
// update progress percentage. If you need.
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
// hide progress dialog. If showing.
// pass result value.
if (asyncGetResponse != null) {
asyncGetResponse.processFinish(result);
}
}
}
如何调用 AsyncGet.java ,请参阅以下行。
new AsyncGet(new AsyncGet.AsyncGetResponse() {
@Override
public void processFinish(String result) {
// process result from Async task.
}
}).execute();
快乐的编码......