4

データベース操作用の非同期タスクがあります

タスクを開始する前に、prograssBar を表示するために、この関数を呼び出しsetVisibility();ます

 public static void showProgressBar()
{
    Log.e("TEST","Try to show ProgressBar, Visibiliy: " + prog_bar.getVisibility());
    if(prog_bar != null)
    {
        prog_bar.setVisibility(RelativeLayout.VISIBLE);
        Log.e("TEST","Success");
    }
    else
    {
        Log.e("TEST","prog_bar != null");
    }
    Log.e("TEST","Visibiliy: " + prog_bar.getVisibility());
}

PostExecute で関数を呼び出します。

 public static void hideProgressBar()
{
    Log.e("TEST","Try to hide ProgressBar, Visibiliy: " + prog_bar.getVisibility());
    if(prog_bar != null)
    {
        prog_bar.setVisibility(RelativeLayout.INVISIBLE);
        Log.e("TEST","Success");
    }
    else
    {
        Log.e("TEST","prog_bar != null");
    }
    Log.e("TEST","Visibiliy: " + prog_bar.getVisibility());
}

奇妙なことに、メソッドは正しく呼び出され、ログも正しく、エラーは表示されませんが、progressBar は表示されません。

Android 2.2、Windows 7、エミュレーターおよび GalaxyTab でテスト済み

よろしくシュワンディ

編集:

私の方法を次のように変更しました:

  public static void hideProgressBar()
{

    if(prog_bar != null)
    {
        Log.e("TEST","Try to hide ProgressBar, Visibiliy: " + prog_bar.getVisibility());
        prog_bar.setVisibility(View.GONE);
        Log.e("TEST","Success");
    }
    else
    {
        Log.e("TEST","prog_bar != null");
    }
    Log.e("TEST","Visibiliy: " + prog_bar.getVisibility());
}

public static void showProgressBar()
{

    if(prog_bar != null)
    {
        Log.e("TEST","Try to show ProgressBar, Visibiliy: " + prog_bar.getVisibility());
        prog_bar.setVisibility(View.VISIBLE);
        Log.e("TEST","Success");
    }
    else
    {
        Log.e("TEST","prog_bar != null");
    }
    Log.e("TEST","Visibiliy: " + prog_bar.getVisibility());
}

まだ動作しません。

また、prog_bar が ProgressBar 自体であることを変更しました。

  prog_bar = (ProgressBar) findViewById(R.id.progressBar1);
4

1 に答える 1

0

を開始するコードのブロック全体をasyncTask次のようにワーカー スレッドに入れてみてください (onClick()関係ない場合は省略します)。

public void onClick(View v) {
    new Thread(new Runnable() {
        public void run() {

            // your entire asyncTask initiation code block here

        }
    }).start();
}

これが私自身の問題をどのように解決したかです。ここにドキュメントがあります。

于 2016-11-23T14:44:31.447 に答える