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