13

アプリケーションにログイン認証用のアラート ダイアログ ボックスがあります。リクエストを送信している間、プログレスバーを表示し、レスポンスが成功した場合は閉じたいと思います。誰かが知っている場合は助けてください。以下のコードを使用しています:

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

4 に答える 4

33

こっちの方が使いやすいかも

ProgressDialog dialog = ProgressDialog.show(MyActivity.this, "", 
                        "Loading. Please wait...", true);

進行状況ダイアログの詳細については、こちらをご覧ください

キャンセルするには

    dialog.dismiss();

このクラスは、API レベル 26 で非推奨になりました。ProgressDialog は、ユーザーがアプリを操作できないようにするモーダル ダイアログです。このクラスを使用する代わりに、アプリの UI に埋め込むことができる ProgressBar などの進行状況インジケーターを使用する必要があります。または、通知を使用してタスクの進行状況をユーザーに通知することもできます。詳細については、ここをクリックしてください。

于 2012-06-11T09:15:58.680 に答える
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();

キャンセル ボタンは、ダイアログを閉じる必要があります。

于 2014-12-05T16:20:15.430 に答える
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();
于 2012-06-11T10:33:07.927 に答える