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