3

ユーザーがボタンをクリックすると、アクティビティ A からアクティビティ B に移動します。
ただし、アクティビティ B では、インターネットからデータをダウンロードするため、進行状況ダイアログを追加したいと考えています。接続は非常に高速で、1 秒未満の場合もあれば、5 秒を超える場合もあります。
進行状況ダイアログに 1 秒未満と表示される場合、ユーザー エクスペリエンスに非常に悪いと思います。
そのため、たとえば 2 秒など、最小読み込み時間を追加したいと思います。
つまり、読み込み時間が 2 秒未満であっても、進行状況ダイアログには少なくとも 2 秒表示されます。
そうする方法はありますか?

4

4 に答える 4

0

以下のコードを使用できます。ここでダイアログの時間とオブジェクトを渡します。

public void timerDelayRemoveDialog(long time, final Dialog d){
    Handler handler = new Handler(); 
    handler.postDelayed(new Runnable() {           
        public void run() {                
            d.dismiss();         
        }
    }, time); 
}

編集済み

このサンプルコードを使用できます:

class LoginProgressTask extends AsyncTask<String, Integer, Boolean> {
  @Override
  protected Boolean doInBackground(String... params) {
    try {
      Thread.sleep(4000);  // Do your real work here
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
    return Boolean.TRUE;   // Return your real result here
  }
  @Override
  protected void onPreExecute() {
    showDialog(AUTHORIZING_DIALOG);
  }
  @Override
  protected void onPostExecute(Boolean result) {
    // result is the value returned from doInBackground
    removeDialog(AUTHORIZING_DIALOG);
    Intent i = new Intent(HelloAndroid.this, LandingActivity.class);
    startActivity(i);
  }
}
于 2012-09-13T09:12:20.857 に答える
0

私の解決策(うまくいきました):

private class ProgressTask extends AsyncTask<Void, Void, Void> {
    ProgressDialog dialog;
    long timestamp1;
    long timestamp2;

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        dialog = new ProgressDialog(YOUR_CONTEXT);
        dialog.setCancelable(false);
        dialog.setMessage("Please wait...");
        dialog.show();

        timestamp1 = System.currentTimeMillis();
    }

    @Override
    protected Void doInBackground(Void... params) {

        //doSomething ...

        return null;
    }

    @Override
    protected void onPostExecute(Void aVoid) {
        super.onPostExecute(aVoid);

        //doSomething ...

        timestamp2 = System.currentTimeMillis();
        long timeDifference = timestamp2 - timestamp1;

        if (timeDifference >= 2000) {
            dialog.dismiss();
        } else {
            Handler h = new Handler();
            h.postDelayed(new Runnable() {
                public void run() {
                    dialog.dismiss();
                }
            }, 2000 - timeDifference);
        }
    }
}
于 2017-12-11T12:37:19.577 に答える
-1

これはあなたを助けるかもしれません

new AsyncTask<Void, Void, Void>() {
            ProgressDialog mDialog;
            ArrayList<String> files;            
            @Override
            protected void onPreExecute() {
                mDialog = new ProgressDialog(MyMainAct.this);
                mDialog.setMessage("Loading");
                mDialog.show();
            }
            @Override
            protected Void doInBackground(Void... params) {
                // TODO Auto-generated method stub
                          //   do your work here 
                Log.i("Share Media MyMainAct", " newFiles is called path is - " + path +"/" + spndirectory.getSelectedItem().toString());               
                files = getFiles(path + "/" + spndirectory.getSelectedItem().toString());               
                return null;
            }           
            @Override
            protected void onPostExecute(Void result){              
                if (mDialog != null && mDialog.isShowing()){
                    mDialog.dismiss();
                }
                setFileAdapter(files);
            }
        }.execute();
于 2012-09-13T11:30:53.597 に答える