7

このようなアクティビティ で水平プログレスバー「Not ProgressDialog 」を表示しようとしていますここに画像の説明を入力

これが私のxmlファイルに含まれるものです

<ProgressBar
    android:id="@+id/pdialog"
    style="?android:attr/progressBarStyleHorizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"        
    android:indeterminate="true"
     />

pdialog.setProgress() を設定して AsyncTask クラスを使用してステータスを更新しようとしていますが、進行状況が表示されません。進行状況ダイアログでは機能しますが、水平進行状況バーでは機能しません。

public class MainActivity extends Activity {

private SQLiteDatabase db;
private Cursor cursor;
private ProgressBar pdialog;
private ImageButton btn;

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.start);
    btn = (ImageButton) findViewById(R.id.startbtn);
    pbar = (ProgressBar) findViewById(R.id.progressBar1);
    pdialog = (ProgressBar) findViewById(R.id.pdialog);
    pdialog.setMax(100);
    pdialog.setProgress(20);
    btn.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            pdialog.setVisibility(View.VISIBLE);
            new DownloadFilesTask().execute();

        }
    });
}

private class DownloadFilesTask extends AsyncTask<Void, Integer, Integer> {

    int load = 1;

    protected Integer doInBackground(Void... params) {

        try {
                load = 10 * i;
                MainActivity.this.runOnUiThread(new Runnable() {

                    @Override
                    public void run() {
                        pdialog.setProgress(load);
                    }
                });

            }

        } catch (Exception e) {     

        }   

    }

    protected void onProgressUpdate(Integer... progress) {

        if (progress[0] == 100) {
            pdialog.setVisibility(View.INVISIBLE);          

        }
    }

    protected void onPostExecute(Integer params) {      

    }

}
}
4

3 に答える 3

4

レイアウトファイルで、要素から次の属性を削除してください。android:indeterminate="true"ProgressBar

于 2013-03-07T07:20:28.950 に答える
4

load変数が正しく変更された場合:

これの代わりに:

MainActivity.this.runOnUiThread(new Runnable() {

                    @Override
                    public void run() {
                        pdialog.setProgress(load);
                    }
                });

あなたが使用することができます:

publishProgress(load);

UIスレッドで自動的に呼び出されます:

protected void onProgressUpdate(Integer... progress) {
    int p = progress[0];
    if (p >= 100) {
        pdialog.setVisibility(View.INVISIBLE);          
    }else{
       pdialog.setProgress(p);
    }
}

アップデート:

android:indeterminate="true"他の回答で指摘されているように削除します。

于 2013-03-07T07:03:13.243 に答える
0

同じ質問がありましたが、View.OnClickListener() インターフェイスに問題があることがわかりました。pbar を btn.setOnClickListener(new View.OnClickListener() {}) から外したところ、うまくいきました。そうしないと、更新されませんでした。次に、pbar を OnXXXClickListener に渡すコンストラクタを作成しました。

private class OnXXXClickListener implements View.OnClickListener() {
        private ProgressBar bar;

        public OnXXXClickListener(ProgressBar bar) {
            this.bar = bar;
        }

        @Override
        public void onClick(View v) {

            bar.setProgess(50);
            new DownloadFilesTask().execute();

        }

}

その後、pbar はうまく機能します。

于 2014-09-23T03:20:07.603 に答える