0

AsyncTaskプログレスバーでフェードインするdoInBackground 内から関数を呼び出そうとしています。この関数を呼び出すたびに、必要に応じてプログレスバーがフェードインしてから消えます。メソッドが完了するGONEとすぐにプログレスバーの可視性が元に戻ったことを示すチェックを最後に追加しました。runOnUIThread

プログラムをリセットして終了

これはなぜですか?プログレスバーが表示されたままになるようにするにはどうすればよいですか?

私は以下を使用しています:

    @TargetApi(12)
    private void fadeInProgressBar(final int time, ProgressBar prog){
        System.out.println("MainActivity: Fading In ProgressBar");
        runOnUiThread(new Runnable(){
            @Override
            public void run() {
                if(usingHigherApiThan(12)&&prog.getVisibility()==View.GONE){
                    prog.setVisibility(View.VISIBLE);
                    if(prog.getAlpha()<1){
                        prog.animate().setDuration(time).alpha(1);
                    }
                }else if(prog.getVisibility()==View.GONE){
                    prog.setVisibility(View.VISIBLE);
                    final AlphaAnimation animation = new AlphaAnimation(0F, 1F);
                    animation.setDuration(time);
                    animation.setFillAfter(true);
                    prog.startAnimation(animation);
                }

            }
        });

        if(prog.getVisibility()==View.VISIBLE){
            System.out.println("Left Prog Visible");
        }else{
            System.out.println("Reset Prog To Gone");
        }
    }

ビルドusingHigherApiThan(12)バージョンが 12 以上であることを確認するだけで、この問題は 12 より上と 11 より下の両方で発生します。

4

1 に答える 1

1

このようにする必要はなく、おそらくそうすべきではありません。すでにスレッドAsyncTaskで実行されているメソッドがあります ( を除くすべて)UIdoInBackground()

実行したいコードを に配置して、が終了したときに実行しUIます。onPostExecute()doInBackground()

または、ニーズにより適している場合は、コードを入れて、onProgressUpdate()必要に応じて でこの関数を呼び出すこともできますpublishProgress()

または、タスクの開始時にのみ実行する必要がある場合は、onPreExecute(). これらはすべて で実行されますUI Thread。で余分な手順を追加する必要はありませんrunOnUiThread()

AsyncTask ドキュメント

于 2013-09-12T19:36:59.983 に答える