Hoje irei mostrar como utilizar a classe ProgressDialog, ela é de grande utilidade em nosso sistemas, principalmente quando o sistema precisa efetuar alguma operação mais demorada e não deixar o usuário com aquela sensação de que o sistema travou.
Existem dois tipos de ProgressDialog que podem ser utilizados:
1 - Loop infinito - Quando você não consegue precisar quando a operação vai terminar, exemplo uma consulta a base de dados que seja muito demorada
2 - Loop finito - Quando por exemplo, você sabe exatamente a quantidade de registros que o seu sistema irá processar.
Como já de costume todos os fontes abaixo estão com vários comentários para facilitar o aprendizado.
Arquivo main.xml, layout da única tela apresentada nesse projeto:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Button
android:text="Progress 1"
android:id="@+id/button1"
android:onClick="Progress1_Click"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</Button>
<Button
android:text="Progress 2"
android:id="@+id/button2"
android:onClick="Progress2_Click"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</Button>
</LinearLayout>
Arquivo main.java:
package br.com.EscaloDeAndroid.Progress;
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.View;
import android.widget.Toast;
public class main extends Activity {
private ProgressDialog mprogressDialog;
private Handler mhandler;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mhandler = new Handler();
}
//o botão abaixo irá simular um processo em que não sabemos quanto tempo
//ele irá demorar
public void Progress1_Click(View v)
{
//cria o progress dialog
mprogressDialog = ProgressDialog.show(main.this, "Aguarde", "Processando...");
new Thread() {
public void run() {
//criando instância de classe para executar um método qualquer
teste lteste = new teste();
try{
//esse é apenas um método de teste que pode ser demorado
lteste.Esperar(10);
} catch (Exception e) {
Log.e("tag", e.getMessage());
}
//encerra progress dialog
mprogressDialog.dismiss();
}
}.start();
}
//o botão abaixo irá simular uma barra com progressão
//e poderemos monitorar seu progresso
public void Progress2_Click(View v)
{
mprogressDialog = new ProgressDialog(this);
mprogressDialog.setCancelable(true);
mprogressDialog.setMessage("Processando...");
//define o estilo como horizontal que nesse caso signifca que terá
//barra de progressão/contagem
mprogressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
//reseta o progress para zero e em seguida define o valor máximo
mprogressDialog.setProgress(0);
mprogressDialog.setMax(8); //esse valor deverá ser definido de acordo com sua necessidade
//apresnta o progressbar
mprogressDialog.show();
new Thread() {
public void run() {
//criando instância de classe para executar um método qualquer
teste lteste = new teste();
try{
while (mprogressDialog.getProgress() < mprogressDialog.getMax()) {
//esse é apenas um método de teste que pode ser demorado
lteste.Esperar(1);
mprogressDialog.incrementProgressBy(1);
}
} catch (Exception e) {
Log.e("tag", e.getMessage());
}
//Exibe mensagem apenas informando o fim da execução da thread
mhandler.post(new Runnable() {
public void run() {
Toast.makeText(getApplicationContext(), "Acabou", Toast.LENGTH_LONG).show();
}
});
//encerra progress dialog
mprogressDialog.dismiss();
}
}.start();
}
}
Abaixo segue o arquivo teste.java:
package br.com.EscaloDeAndroid.Progress;
public class teste extends Thread {
public void Esperar(int pintSegundos)
{
try {
//simulando um processo demorado
Thread.sleep(pintSegundos * 1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Como resultado temos as seguintes imagens:
Desenvolvi o jogo Circus Puzzle Free ele é um quebra-cabeça e está publicado no Android Market, agradeço a todos que baixarem, jogarem e comentarem.
Desenv com qualidade!

5 comentários:
Muito bom, parabéns.
Rodrigo,
Obrigado pela visita!
Curti também!!
Desculpe não pude evitar de testar... quando você cancela e roda de novo a barrinha dai ela carrega mais rápido, como eu poderia fazer para parar a Thread também? Existe algum "onFailure"?
Vlw
Muito bom, parabéns
Estou iniciando meus estudos com o Android, e esse post me ajudou muito.
Você usa Teste e Espera?????? não entendi
Postar um comentário