1
resposta

Fiz diferente

Não da para colocar somente um finish(); ? fiz assim e funcionou do jeito esperado para mim. Olhe a minha classe como está. Ela abre a lista logo ao iniciar o programa pois penso que no futuro vai ter algo gravado na memória ou algo do tipo e vamos apresentar uma lista logo ao iniciar o programa.

public class ListaDeAlunosActivity extends AppCompatActivity {

private AlunoDAO dao = new AlunoDAO();
private ArrayList<Aluno> listaAlunos = dao.getListaDeAlunos();
private static final String TITULO = "Lista de alunos";

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_lista_alunos);
    setTitle(TITULO);
    abreLista();
    configuraFABNovoAluno();
}

private void abreLista() {
    ListView lista = findViewById(R.id.activity_listagem_de_alunos);
    lista.setAdapter(new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, listaAlunos));
    listnerDeClickParaEdicaoDeAluno(lista);
    listenerDeClickLongoParaRemoverAluno(lista);
}

private void listenerDeClickLongoParaRemoverAluno(ListView lista) {
    lista.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
        @Override
        public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
            Aluno alunoEscolhido = (Aluno) parent.getItemAtPosition(position);
            if(dao.removeAluno(alunoEscolhido)){
                finish();
            }
            return true;
        }
    });
}

private void listnerDeClickParaEdicaoDeAluno(ListView lista) {
    lista.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            //Toast.makeText(ListaDeAlunosActivity.this, "posicao" + position, Toast.LENGTH_LONG).show();
            Aluno alunoEscolhido = (Aluno) parent.getItemAtPosition(position);
            // Aluno alunoEscolhido = listaAlunos.get(position);
            abreFormularioEditaAlunoActivity(alunoEscolhido);
        }
    });
}

private void configuraFABNovoAluno() {
    FloatingActionButton botaoNovoAluno = findViewById(R.id.activity_lista_alunos_fab_novo_aluno);
    botaoNovoAluno.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            abreFormularioNovoAlunoActivity();
        }
    });
}

private void abreFormularioNovoAlunoActivity() {
    startActivity(new Intent(this, FormularioNovoAlunoActivity.class));
}

private void abreFormularioEditaAlunoActivity(Aluno alunoId) {
    Intent dadosParaEditarAluno = new Intent(this, FormularioEditaAlunoActivity.class);
    dadosParaEditarAluno.putExtra("aluno", alunoId);
    startActivity(dadosParaEditarAluno);
}

@Override
protected void onResume() {
    super.onResume();
    abreLista();
}
1 resposta

Oi Bruno, tudo bem? Não tem problema diferente, mas emulando seu código aqui de cabeça, você vai ter um problema quando atualizar a lista de alunos, como você salva a lista do dao direto em um atributo, se você for em uma outra tela, alterar a lista e voltar, as alterações não vão ser visíveis, por que a lista foi salva direto na tela de listagem.

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