1

AsyncTaskを実行しているときに、進行状況インジケーターを表示したいと思います。こちらのストックは醜いので自分でレイアウトを作りました。問題がありますが、それは別のレイアウトであるため、表示するには新しいアクティビティが必要です。

startActivity(〜progressActivity〜)を開始してから...破棄できると思いましたか?しかし、親からの子の活動を止めることは不可能のようです。

AsyncTask-invoking-activityの進行状況インジケーターを非表示にして、処理時に残りのレイアウトを表示および非表示にすることができます。これで、メインレイアウトに2つのサブレイアウトが必要になり、毎回1つずつ非表示になります。これはハックのように聞こえますが、私はあまり好きではありません。

助言がありますか?

4

2 に答える 2

2

ProgressBarをさらに制御する必要がある場合は、WindowManagerを使用してすべての上にビューを追加できます。追加のレイアウト、アクティビティ、ウィンドウなしで実行できます。通常の表示の場合と同じように、アニメーション、タッチ、位置、および可視性を制御できます。完全に機能するコード:

final ProgressBar view = new ProgressBar(TestActivity.this);
view.setBackgroundColor(0x7f000000);
final LayoutParams windowParams = new WindowManager.LayoutParams();
windowParams.gravity = Gravity.CENTER;
windowParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
windowParams.width = WindowManager.LayoutParams.WRAP_CONTENT;
windowParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
        | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
        | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN;
windowParams.format = PixelFormat.TRANSLUCENT;
windowParams.windowAnimations = 0;

new AsyncTask<Integer, Integer, Integer>() {
    public void onPreExecute() {
        // init your dialog here;
        getWindowManager().addView(view, windowParams);
    }

    public void onPostExecute(Integer result) {
        getWindowManager().removeView(view);
        // process result;
    }

    @Override
    protected Integer doInBackground(Integer... arg0) {
        // do your things here
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }
}.execute();
于 2013-02-26T10:26:20.197 に答える
0
new AsyncTask<Params, Progress, Result>() {
   Dialog dlg = new Dialog();
   View customProgress;
   public void onPreExecute() {
       //init your dialog here;
       View customProgress = LayoutInflater.from(CurrentActivity.this).inflate(R.layout.your_progress_layout, null, false);
       dialog.setContentView(view);
       dialog.show();
   }
   public Result doInBackground(Params... params) {
    // do something
    publishProgress(progress);  
   }
   public void onProgressUpdate(Progress progress) {
    // do something with progressView;
   }
   public void onPostExecute(Result result) {
      dlg.dissmiss();
      // process result;
   }
}.execute();

これは可能な方法です(サンプルのみ、エラーが含まれている可能性があります)

于 2013-02-26T10:06:09.167 に答える