在警报对话框中显示进度条

时间:2012-06-11 09:08:45

标签: android

我的应用程序中有一个用于登录验证的警告对话框。在发送请求时,我想显示进度条,如果响应成功则想解雇。如果有人知道,请帮助我。我使用以下代码:

final AlertDialog.Builder alert = new AlertDialog.Builder(this);
LinearLayout login = new LinearLayout(this);
TextView tvUserName = new TextView(this);
TextView tvPassword = new TextView(this);
TextView tvURL = new TextView(this);
final EditText etUserName = new EditText(this);
final EditText etPassword = new EditText(this);
final EditText etURL = new EditText(this);
login.setOrientation(1); // 1 is for vertical orientation
tvUserName.setText(getResources().getString(R.string.username));
tvPassword.setText(getResources().getString(R.string.password));
tvURL.setText("SiteURL");
login.addView(tvURL);
login.addView(etURL);
login.addView(tvUserName);
login.addView(etUserName);
login.addView(tvPassword);
etPassword.setInputType(InputType.TYPE_CLASS_TEXT
| InputType.TYPE_TEXT_VARIATION_PASSWORD);
login.addView(etPassword);
alert.setView(login);
alert.setTitle(getResources().getString(R.string.login));
alert.setCancelable(true);
alert.setPositiveButton(getResources().getString(R.string.login),
new DialogInterface.OnClickListener() {
    public void onClick(final DialogInterface dialog,
    int whichButton) {
        strhwdXml = etURL.getText().toString();
        strUserName = etUserName.getText().toString();
        XmlUtil.username = strUserName;
        strPassword = etPassword.getText().toString();
        if ((strUserName.length() == 0)
        && (strPassword.length() == 0)
        && (strhwdXml.length() == 0)) {
            Toast.makeText(
            getBaseContext(),
            getResources().getString(
            R.string.userPassword),
            Toast.LENGTH_SHORT).show();
            onStart();
            } else {
            final SharedPreferences prefs = PreferenceManager
            .getDefaultSharedPreferences(getApplicationContext());
            SharedPreferences.Editor prefsEditor = prefs
            .edit();
            try {
                StringBuffer inStreamBuf = new StringBuffer();
                inStreamBuf = XmlUtil
                .getLoginAuthResponse(strUserName,
                strPassword, strhwdXml);
                strXmlResponse = inStreamBuf.toString();
                Log.e("Response:", strXmlResponse);
                String parsedXML = ParseResponse(strXmlResponse);
                if (parsedXML
                .equalsIgnoreCase(getResources()
                .getString(R.string.success))) {
                }

4 个答案:

答案 0 :(得分:27)

使用此

可能更容易
ProgressDialog dialog = ProgressDialog.show(MyActivity.this, "", 
                        "Loading. Please wait...", true);

您可以阅读有关进度对话框的更多信息here

取消将是

    dialog.dismiss();
  

此类在API级别26中已弃用.ProgressDialog是一种模式   对话框,阻止用户与应用程序交互。代替   使用这个类,你应该使用像这样的进度指示器   ProgressBar,可以嵌入到您应用的UI中。或者,   您可以使用通知来通知用户任务的进度。有关详细信息Click Here

答案 1 :(得分:4)

如果您希望显示进度条,请尝试以下步骤,同时您可以将整个代码复制并粘贴到代码的相关部分,它应该可以正常工作。

//the first thing you need to to is to initialize the progressDialog Class like this

final ProgressDialog progressBarDialog= new ProgressDialog(this);

//set the icon, title and progress style..

progressBarDialog.setIcon(R.drawable.ic_launcher);

progressBarDialog.setTitle("Showing progress...");

progressBarDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);


    //setting the OK Button
    progressBarDialog.setButton(DialogInterface.BUTTON_POSITIVE, "OK", new DialogInterface.OnClickListener(){
        public void onClick(DialogInterface dialog,
                int whichButton){
            Toast.makeText(getBaseContext(),
                    "OK clicked!", Toast.LENGTH_SHORT).show();
        }
    });

    //set the Cancel button
    progressBarDialog.setButton(DialogInterface.BUTTON_NEGATIVE, "Cancel", new DialogInterface.OnClickListener(){
        public void onClick(DialogInterface dialog, int whichButton){
            Toast.makeText(getApplicationContext(), "Cancel clicked", Toast.LENGTH_SHORT).show();
        }
    });
//initialize the dialog..
progressBarDialog.setProgress(0);

//setup a thread for long running processes
new Thread(new Runnable(){
    public void run(){
        for (int i=0; i<=15; i++){
            try{
                Thread.sleep(1000);
                progressBarDialog.incrementProgressBy((int)(5));
            }
            catch(InterruptedException e){
                e.printStackTrace();
            }
        }
        //dismiss the dialog
        progressBarDialog.dismiss();
     }
   });

//show the dialog
progressBarDialog.show();

取消按钮应该关闭对话框。

答案 2 :(得分:2)

由于不推荐使用ProgressDialog类,因此这是在ProgressBar中显示AlertDialog的简单方法:

  1. 在“活动”中添加字段:

    AlertDialog.Builder builder;
    AlertDialog progressDialog;
    
  2. 在“活动”中添加getDialogProgressBar()方法:

    public AlertDialog.Builder getDialogProgressBar() {
    
      if (builder == null) {
        builder = new AlertDialog.Builder(this);
    
        builder.setTitle("Loading...");
    
        final ProgressBar progressBar = new ProgressBar(this);
        LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
            LinearLayout.LayoutParams.WRAP_CONTENT,
            LinearLayout.LayoutParams.WRAP_CONTENT);
        progressBar.setLayoutParams(lp);
        builder.setView(progressBar);
      }
      return builder;
    }
    
  3. 初始化progressDialog

    progressDialog = getDialogProgressBar().create();
    
  4. 只要您想使用实用程序方法,就显示/隐藏AlertDialog:

    progressDialog.show()progressDialog.dismiss()

答案 3 :(得分:0)

尝试以下代码

  private class DownloadingProgressTask extends
        AsyncTask<String, Void, Boolean> {

    private ProgressDialog dialog = new ProgressDialog(ShowDescription.this);

    /** progress dialog to show user that the backup is processing. */

    /** application context. */

    protected void onPreExecute() {
         this.dialog.setMessage("Please wait");
         this.dialog.show();
    }

    protected Boolean doInBackground(final String... args) {
        try {
            // write your request code here


            **StringBuffer inStreamBuf = new StringBuffer();
            inStreamBuf = XmlUtil
            .getLoginAuthResponse(strUserName,
            strPassword, strhwdXml);
            strXmlResponse = inStreamBuf.toString();
            Log.e("Response:", strXmlResponse);
            String parsedXML = ParseResponse(strXmlResponse);
            if (parsedXML
            .equalsIgnoreCase(getResources()
            .getString(R.string.success))) {**

              return true;
        } catch (Exception e) {
            Log.e("tag", "error", e);
            return false;
        }
    }

    @Override
    protected void onPostExecute(final Boolean success) {

        if (dialog.isShowing()) {
            dialog.dismiss();
        }

        if (success) {
            Toast.makeText(ShowDescription.this,
                    "File successfully downloaded", Toast.LENGTH_LONG)
                    .show();
            imgDownload.setVisibility(8);
        } else {
            Toast.makeText(ShowDescription.this, "Error", Toast.LENGTH_LONG)
                    .show();
        }
    }

}

并在onclick事件中调用它

new DownloadingProgressTask().execute();