0

ProgressDialogホイールを回転させるのに問題があります。これが私のコードです:

final ProgressDialog dialog = ProgressDialog.show(this, "", "Loading...", true, false);
Thread thread=new Thread(new Runnable(){
    public void run(){
    runOnUiThread(new Runnable(){
        @Override
        public void run() {
            if(dialog.isShowing())
                // starts a foreground service, does database stuff, 
                // sets up a spinner with values
                dialog.dismiss();
            }

        });
    }
});

thread.start();

すべてが計画どおりに進み、ProgressDialogを取得します。バックグラウンドで処理が行われ、設定するとProgressDialogが消えます。唯一の問題は、ProgressDialogのアニメーションが回転せず、ほとんど役に立たなくなることです。

私は何が間違っているのですか?

4

3 に答える 3

1

ここで省略したコード

        // starts a foreground service, does database stuff, 
        // sets up a spinner with values

UIスレッドをブロックする何かをする必要があります。runOnUiThread()それらをメソッドの外に置くだけです。

Thread thread=new Thread(new Runnable(){
    public void run(){
        // starts a foreground service, does database stuff, 
        // sets up a spinner with values
        runOnUiThread(new Runnable(){
            @Override
            public void run() {
            if(dialog.isShowing())
                dialog.dismiss();
            }

        });
    }
});
于 2012-04-22T14:23:22.137 に答える
0

たとえば、私のエラーで処理ダイアログを間違った領域に配置したため: MainActivityShowingActivityの 2 つのアクティビティがあるため、MainActivity は新しいインテントが ShowingActivity に転送された後に処理ダイアログを表示し、ShowingActivity はサーバーからデータを取得します (それはここでブロックされます)。MainActivity で ProcessingDialog を呼び出すと、サーバーからデータを取得するアクションが数秒待たなければならないため、インテントが ShowingActivity に移動し、Ui をブロックするため、表示されましたが回転しませんでした。だから私はそれを修正しました: 1/ MainActivity 呼び出しで:

final Intent working = new Intent(getApplicationContext(),
                    WorkingActivity.class);
final ProgressDialog ringProgressDialog = ProgressDialog.show(
                    MainActivity.this, "Please wait ...", "Connecting ...",
                    true);
ringProgressDialog.setCancelable(false);
new Thread(new Runnable() {
                        @Override
                        public void run() {
                            //Menthod need time to load:
                                    getDatafromServer();
                             if (BookListFragment.isLoaded) {
                                ringProgressDialog.dismiss();
                                startActivity(working);
                                return;
                             }
});

DATA を取得した後も MainActivity が実行されているため、Ui はブロックされません。そして、ShowingActivity では、この DATA を使用します (DATA を静的文字列に設定したため)。

于 2015-02-04T11:20:38.603 に答える
0

ハンドラ android を使用した ProgressDialog の例

    final ProgressDialog dialog = ProgressDialog.show(this, "Title",
            "Message", true);

    final Handler handler = new Handler() {
        public void handleMessage(Message msg) {
            dialog.dismiss();
        }
    };
    Thread t = new Thread() {
        public void run() {
            // write process code here.

            handler.sendEmptyMessage(0);
        }
    };
    t.start();

問題を修正: ProgressDialog が機能しない

于 2014-07-14T02:32:31.543 に答える