1
resposta

[Dúvida] Não consigo colocar para editar um item na lista

Estou com bastante problemas durante essas aulas. Um deles é que não consigo editar um Aluno na lista (quando clico em um nome ele abre o formulario como se fosse para criar um novo aluno, ao inves de editar algum existente). Sendo assim meu app nao condiz com o mostrado na aula.

A minha activity lista de alunos esta assim:

public class ListaAlunosActivity extends AppCompatActivity {

    public static final String TITULO_APPBAR = "Lista de Alunos";
    private final AlunoDAO dao = new AlunoDAO();

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_lista_alunos);
        configuraFABNovo();
        setTitle(TITULO_APPBAR);

    }

    private void configuraFABNovo() {
        FloatingActionButton botaoNovoAluno = findViewById(R.id.activity_lista_alunos_fab_novo_aluno);

        botaoNovoAluno.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                abreFormularioAlunoActivity();
            }
        });
    }

    private void abreFormularioAlunoActivity() {
        startActivity(new Intent(this, FormularioAlunoActivity.class));
    }

    @Override
    protected void onResume() {
        super.onResume();
        configuraLista();
    }

    private void **configuraLista**() {
        ListView listaDeAlunos = findViewById(R.id.activity_lista_alunos_listview);
        List<Aluno> alunos = dao.todos();
        listaDeAlunos.setAdapter(
                new ArrayAdapter<>(
                        this,
                        android.R.layout.simple_list_item_1,alunos ));
        listaDeAlunos.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Aluno alunoEscolhido = alunos.get(position);
                Intent editarFormulario = new Intent(ListaAlunosActivity.this,
                        FormularioAlunoActivity.class);
                editarFormulario.putExtra("aluno", alunoEscolhido);
                startActivity(editarFormulario);
            }
        });
    }
}

e meu formulario esta da seguinte maneira nesse momento:

package com.example.agenda.ui.activity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

import androidx.appcompat.app.AppCompatActivity;

import com.example.agenda.R;
import com.example.agenda.dao.AlunoDAO;
import com.example.agenda.model.Aluno;

public class FormularioAlunoActivity extends AppCompatActivity {

    public static final String TITULO_APPBAR = "Novo Aluno";
    public static final AlunoDAO dao = new AlunoDAO();
    private EditText campoNome;
    private EditText campoTelefone;
    private EditText campoEmail;
    private Aluno aluno;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_formulario_aluno);
        setTitle(TITULO_APPBAR);
        inicializacaoCampos();
        configuraBotaoSalvar(dao);
        Intent dados = getIntent();

        if (dados.hasExtra("aluno") && aluno != null) {
            aluno = (Aluno) dados.getSerializableExtra("Aluno");
            campoNome.setText(aluno.getNome());
            campoTelefone.setText(aluno.getTelefone());
            campoTelefone.setText(aluno.getEmail());
        } else {
            aluno = new Aluno();
        }
    }

    private void configuraBotaoSalvar(AlunoDAO dao) {
        Button botaoSalvar = findViewById(R.id.activity_formulario_aluno_botao_salvar);
        botaoSalvar.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {
                preencheAluno();
                if (aluno.temIdValido()) {
                    dao.edita(aluno);
                } else {
                    dao.salva(aluno);
                }
                finish();
            }
        });
    }

    private void inicializacaoCampos() {
        campoNome = findViewById(R.id.activity_formulario_aluno_nome);
        campoTelefone = findViewById(R.id.activity_formulario_aluno_telefone);
        campoEmail = findViewById(R.id.activity_formulario_aluno_email);
    }

    private void preencheAluno() {
        String nome = campoNome.getText().toString();
        String telefone = campoTelefone.getText().toString();
        String email = campoEmail.getText().toString();

        aluno.setNome(nome);
        aluno.setTelefone(telefone);
        aluno.setEmail(email);
    }
}
1 resposta

Fala Murilo, de boa ?

Cara, o problema é no teu formulário

if (dados.hasExtra("aluno") && aluno != null) {

nesse ponto o aluno sempre vai ser nulo, então nesse caso faz mais sentido tu remover essa validação e só ver se veio algo pela intent:

if (dados.hasExtra("aluno") ) {