🚀 3.9 ProgressBar e Feedback de Operação

Sempre que uma operação demorada for executada, como o download de dados ou processamento de arquivos, é crucial manter o usuário informado. No Android moderno, o antigo ProgressDialog foi descontinuado em favor do uso de ProgressBars diretamente na interface ou em diálogos personalizados.

Por que não usar ProgressDialog?

WARNING

Componente Depreciado: O ProgressDialog (API 26+) é desencorajado porque impede a interação do usuário com a tela inteira de forma forçada. A recomendação atual é integrar o feedback visual diretamente no layout ou utilizar um DialogFragment personalizado.

Implementando a ProgressBar no Layout

No layout lista_viagem.xml, adicionamos uma barra de progresso horizontal para mostrar o consumo do orçamento:

<ProgressBar 
    android:id="@+id/barraProgresso" 
    android:layout_width="match_parent" 
    android:layout_height="8dp" 
    style="@style/Widget.AppCompat.ProgressBar.Horizontal"
    android:layout_marginTop="8dp"
    android:progressTint="@color/primary_blue" />

Manipulação de Progresso (ViewBinding & Java 17)

Dentro do nosso ViewBinder na ViagemListActivity, atualizamos os valores da barra de forma dinâmica:

@Override
public boolean setViewValue(View view, Object data, String textRepresentation) {
    if (view.getId() == R.id.barraProgresso) {
        // Utilizamos Double[] para orçamento, limite e total gasto
        var valores = (Double[]) data;
        var progressBar = (ProgressBar) view;
 
        progressBar.setMax(valores[0].intValue()); // Orçamento
        progressBar.setSecondaryProgress(valores[1].intValue()); // Limite
        progressBar.setProgress(valores[2].intValue()); // Gasto atual
 
        return true;
    }
    return false;
}

Indicação de Processamento (Indeterminado)

Para operações sem duração definida, utilize a versão circular da ProgressBar integrada ao layout e controle sua visibilidade:

// Exibe a barra antes da operação
binding.loadingBar.setVisibility(View.VISIBLE);
 
// Oculta após a conclusão
binding.loadingBar.setVisibility(View.GONE);

TIP

O uso de progressTint permite harmonizar a barra de feedback com a paleta de cores da sua aplicação (Material Design 3), proporcionando um acabamento Premium.


⬅️ Capítulo Anterior | Próximo Capítulo ➡️