🚀 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.Buildersegue 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étodocreate().
TIP
No Java 17, utilizamos a sintaxe de
switchsimplificada (->) para tornar o tratamento de opções muito mais limpo e menos propenso a erros de fall-through.