Gregor Menih
Gregor Menih

Reputation: 5126

Android: Time delay in a loop with updating UI

What I'm trying to create is a simple progress bar, that would load for ~10 sec. So what I want is a for loop like this:

for(int i = 1; i <= 100; i++) {
                    progressDialog.setProgress(i);
                    //100ms delay
                }

Thanks

Upvotes: 3

Views: 6616

Answers (3)

Ecthelion
Ecthelion

Reputation: 119

A shorter solution without explicitly creating a new Thread would look like this:

final Handler handler = new Handler(Looper.getMainLooper());
final int sleepMs = 100;
for (int i = 1; i <= 100; ++i) {
    handler.postDelayed(() -> progressDialog.setProgress(value), i * sleepMs);
}

Upvotes: 1

jeet
jeet

Reputation: 29199

You can use Async Task for the purpose

in preExecute() method initialize loop index to 0;

in background process sleep thread for 10 seconds, and then call sendUpdate method to send progress

in postExecute update progress bar to progress get in parameter.

Upvotes: 3

himanshu
himanshu

Reputation: 1980

The following code may be helpful for you.

public void startProgress(View view) {
    // Do something long
    Runnable runnable = new Runnable() {
        @Override
        public void run() {
            for (int i = 0; i <= 10; i++) {
                final int value = i;
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        progressDialog.setProgress(value);
                    }
                });
            }
        }
    };
    new Thread(runnable).start();
}

Upvotes: 1

Related Questions