Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Inserir dialog de confirmação depois da remoção

Pessoal, estou tentando pôr outro dialog após a confirmação da remoção mas ele está aparecendo antes. Eu fiz assim.

        @Override
    public boolean onContextItemSelected(@NonNull MenuItem item) {
        int itemId = item.getItemId();
        if(itemId == R.id.activity_lista_alunos_menu_remover) {
            confirmaRemocao(item);
            configuraDialogDeConfirmacao();
        }
        return super.onContextItemSelected(item);
    }

    private void configuraDialogDeConfirmacao() {
        new AlertDialog.Builder(this)
                .setMessage("Aluno removido com sucesso.")
                .setPositiveButton("OK", null)
                .show();
    }
    private void confirmaRemocao(@NonNull final MenuItem item) {
        new AlertDialog
                .Builder(this)
                .setTitle("Removendo aluno")
                .setMessage("Tem certeza que deseja remover o aluno?")
                .setPositiveButton("Sim", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        AdapterView.AdapterContextMenuInfo menuInfo =
                                (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
                        Aluno alunoEscolhido = adapter.getItem(menuInfo.position);
                        removeAluno(alunoEscolhido);
                    }
                })
                .setNegativeButton("Não", null).
                show();
    }

Dessa forma o dialog de confirmação que está no onContextItemSelected aparece antes mesmo que eu remova o item. Como poderia fazer para que ele aparecesse apenas depois de uma remoção?

3 respostas
solução!

Pessoal, eu achei uma solução, ao invés de eu chamar a função configuraDialogDeConfirmacao no onContextItemSelected eu chamei ela no onClick do DialogInterface, ficando assim:

    private void confirmaRemocao(@NonNull final MenuItem item) {
        new AlertDialog
                .Builder(this)
                .setTitle("Removendo aluno")
                .setMessage("Tem certeza que deseja remover o aluno?")
                .setPositiveButton("Sim", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        AdapterView.AdapterContextMenuInfo menuInfo =
                                (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
                        Aluno alunoEscolhido = adapter.getItem(menuInfo.position);
                        removeAluno(alunoEscolhido);
                        configuraDialogDeConfirmacao();
                    }
                })
                .setNegativeButton("Não", null).
                show();
    }
    private void configuraDialogDeConfirmacao() {
        new AlertDialog.Builder(this)
                .setMessage("Aluno removido com sucesso.")
                .setPositiveButton("OK", null)
                .show();
    }

Eu não sei se essa seria a forma mais "limpa" de se fazer isso. Caso alguém tenha uma feito isso com um código mais limpo agradeceria se postassem aqui.

Oi Edilson, é assim mesmo, acho que foi uma boa solução. Talvez eu só tentaria reduzir um pouco do código que está dentro da implementação da interface, mas isso não é um problema.

Ok Wanderson, tentarei fazer essa redução. Obrigado pela dica.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software