【问题标题】:ANDROID: How to wait for click on Alert Dialog?ANDROID:如何等待点击警报对话框?
【发布时间】:2017-12-19 09:03:49
【问题描述】:

我准备了带有“是/否”按钮的警报对话框的 AsyncTask。我需要返回 1 表示是,0 表示否。 我不完全了解 AsyncTask。增加点击等待时间需要做什么?当前状态不等待

代码类:

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

【问题讨论】:

    标签: android android-asynctask dialog return android-alertdialog


    【解决方案1】:

    我无法理解你的问题。但通常 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();
    

    编码愉快...

    【讨论】:

      【解决方案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;
        }
      

      【讨论】:

        猜你喜欢
        • 2018-05-29
        • 1970-01-01
        • 1970-01-01
        • 2021-10-11
        • 2023-03-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-25
        相关资源
        最近更新 更多