🚀 3.8 AlertDialog

O AlertDialog é essencial para interagir com o usuário em decisões críticas, como confirmações de exclusão. Para garantir a estabilidade durante mudanças de configuração (como a rotação da tela), devemos encapsular o AlertDialog em um DialogFragment.

Implementando com DialogFragment

Nesta abordagem moderna, criamos um fragmento especializado que constrói o diálogo utilizando o AlertDialog.Builder.

public class OpcoesViagemFragment extends DialogFragment {
 
    private final OnClickListener listener;
 
    public OpcoesViagemFragment(OnClickListener listener) {
        this.listener = listener;
    }
 
    @NonNull
    @Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
        var items = new CharSequence[] {
            getString(R.string.editar),
            getString(R.string.novo_gasto),
            getString(R.string.gastos_realizados),
            getString(R.string.remover)
        };
 
        return new AlertDialog.Builder(requireContext())
                .setTitle(R.string.opcoes)
                .setItems(items, listener)
                .create();
    }
}

Exibindo o Diálogo na ViagemListActivity

Ao selecionar um item na lista, instanciamos o fragmento e o exibimos utilizando o SupportFragmentManager:

// Na ViagemListActivity.java
binding.listViewViagens.setOnItemClickListener((parent, view, position, id) -> {
    this.viagemSelecionada = position;
    
    var fragment = new OpcoesViagemFragment((dialog, which) -> {
        switch (which) {
            case 0 -> editarViagem();
            case 1 -> registrarGasto();
            case 2 -> listarGastos();
            case 3 -> confirmarRemocao();
        }
    });
    
    fragment.show(getSupportFragmentManager(), "opcoesViagem");
});

IMPORTANT

Por que usar Builder? O AlertDialog.Builder segue o padrão de projeto Builder, permitindo configurar o diálogo (título, botões, ícones, listas) de forma fluida e legível antes de criá-lo definitivamente com o método create().

TIP

No Java 17, utilizamos a sintaxe de switch simplificada (->) para tornar o tratamento de opções muito mais limpo e menos propenso a erros de fall-through.


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