0

私のコード:

OnClickListener()//onclicklistener for button
{
    ProgressBar = new ProgressDialog(LoginPageActivity.this);
    ProgressBar.setMessage("please wait..");     
    ProgressBar.show();

    TcpConnection loginConnect = new TcpConnection();//TcpConnection is a class
    loginConnect.run();
    ProgressBar.dismiss();
}

別のクラスを呼び出す前に進行状況ダイアログを表示し、呼び出しが終了した後にそれを閉じようとしました。しかし、プログレスバーは表示されず、早期に却下されました。しかし、一定期間プログレスバーを表示したい。

tcp 接続クラス内: ユーザー名パスワード用のソケット接続があり、一定期間進行状況を表示する必要があります

やり方がわからない!

4

3 に答える 3

2

スレッドを使用する必要があることをどのように理解していますか。このような

ProgressBar p = new ProgressDialog(LoginPageActivity.this);
Private Handler handler = new Handler();
p.setVisibality(0); //makes visible
    new Thread(new Runnable() {
                   public void run() {
                          TcpConnection loginConnect = new TcpConnection();
                          loginConnect.run();
                          handler.post(new Runnable() {
                                           public void run() {
                                      p.setVisibility(8);//Makes Invisible                      
                                                }
                                              });
                                   }

                  }).start();

私はそれがあなたを助けると思います

于 2012-07-04T06:54:48.773 に答える
2

私の推測では、それloginConnect.run()は独自のスレッドで実行されています。そのため、進行状況ダイアログがすぐに閉じられます。

代わりに次のことを行う必要があります。

class LoginTask extends AsyncTask<Void, Void, Void>{
    ProgressDialog d;
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        d = new ProgressDialog(LoginPageActivity.this);
        d.setMessage("please wait..");     
        d.show();
    }

    @Override
    protected Void doInBackground(Void... params) {
        TcpConnection loginConnect = new TcpConnection();
        loginConnect.run();
        return null;
    }

    @Override
    protected void onPostExecute(Void result) {
        super.onPostExecute(result);
        d.dismiss();
    }   
}

そしてあなたのonClickListener電話でnew LoginTask().execute();

于 2012-07-04T07:07:44.657 に答える
2

AsyncTask目的を達成するために使用します。タスクが終了するまでprogressbar(inside )を表示し(inside ) 、タスクが終了したら (inside ) を閉じることができます。onPreExecute()doInBackground()onPostExecute()

詳細については、次のリンクを確認してください。

http://developer.android.com/reference/android/os/AsyncTask.html

于 2012-07-04T06:44:01.750 に答える