ANDROID:如何等待单击Alert Dialog?

时间:2017-07-14 09:53:49

标签: android android-asynctask dialog return alertdialog

我使用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();

2 个答案:

答案 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();

快乐的编码......