3
respostas

Ao alterar os dados de um aluno, a activity não retorna para a lista de alunos

Ao clicar para alterar os dados, o programa carrega normalmente as informações no formulário, porém, ao clicar em salvar ele não volta para a lista. O programa permanece na tela do formulário com os campos em branco. Então eu preciso voltar usando o menu do celular para poder voltar pra lista. E na lista as informações do aluno foram atualizadas. Segue abaixo o FormularioActivity.java:

package com.agenda;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.Toast;

import com.agenda.modelo.Aluno;


public class FormularioActivity extends AppCompatActivity {

    private FormularioHelper helper;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_formulario);

        helper = new FormularioHelper(this);

        Intent intent = getIntent();
        Aluno aluno = (Aluno) intent.getSerializableExtra("aluno");

        if (aluno != null) {
            helper.preencheFormulario(aluno);
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu_formulario, menu);
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.menu_formulario_ok:
                Aluno aluno = helper.pegaAluno();
                AlunoDAO dao = new AlunoDAO(this);

                if (aluno.getId() == null) {
                    dao.insere(aluno);
                } else {
                    dao.altera(aluno);
                }

                dao.close();
                Toast.makeText(FormularioActivity.this, "Aluno " + aluno.getNome() + " salvo!", Toast.LENGTH_SHORT).show();
                finish();
                break;
        }
        return super.onOptionsItemSelected(item);
    }
}

.

3 respostas

Fala ai Davi, de boa ?

Olhei seu código e tá tudo certinho.

Você está chamando o método finish() que é responsável por finalizar a activity, deveria funcionar sem grandes problemas.

Opa Matheus, tudo em paz e você?

Então, onde ficaria esse finish()?

Pois nessa parte:

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.menu_formulario_ok:
                Aluno aluno = helper.pegaAluno();
                AlunoDAO dao = new AlunoDAO(this);

                if (aluno.getId() == null) {
                    dao.insere(aluno);
                } else {
                    dao.altera(aluno);
                }

                dao.close();
                Toast.makeText(FormularioActivity.this, "Aluno " + aluno.getNome() + " salvo!", Toast.LENGTH_SHORT).show();
                finish();
                break;
        }
        return super.onOptionsItemSelected(item);
    }

Tentei alterar para:

if (aluno.getId() == null) {
                    dao.insere(aluno);
                } else {
                    dao.altera(aluno);
                    finish();
                    break;
                }

Mas continua na mesma.. Até revisei com o código de vocês no GitHub e aparentemente tá tudo certo.. Tem algum idéia do que pode ser?

Pode ser que a sua atualização não tenha ido para o emulador, algo bem comum quando instalamos aquele instant run