Na versão mais recente do Android Studio 2022 (API 33) o código apresentado no curso não exibe mais os alunos na lista após adicioná-los.
Inspecionando o código eu suspeitei que o motivo era a instanciação do AlunoDAO, pois tanto o ListaAlunosActivity quanto o FormularioAlunoActivity criavam instâncias diferentes do AlunoDAO (ambos faziam "new AlunoDAO()").
Então eu refatorei o código para guardar o AlunoDAO como um membro da classe ListaAlunosActivity, e esse membro é acessado dentro do setOnClickListener do FormularioAlunoActivity, dessa forma ambas as Activities compartilham a mesma instância, e isso resolveu o problema.
As minhas perguntas são:
- A minha suspeita faz sentido?
- Algo mudou nas novas APIs do Android para que o código do curso não funcionasse mais?
- Caso sim, a minha solução é a ideal pra se adaptar a essa nova API?
Além disso, talvez seja interessante deixar uma observação no curso para esse tipo de problema.
Segue o meu código (os nomes estão em inglês mas de resto é análogo ao código do Alex):
ListaAlunosActivity
public class StudentsListActivity extends AppCompatActivity {
public static final AlunoDAO alunoDAO = new AlunoDAO();
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_students_list);
setTitle("Students list");
FloatingActionButton fabNewStudent = findViewById(R.id.activity_main_fab_new_student);
fabNewStudent.setOnClickListener(view -> {
startActivity(new Intent(StudentsListActivity.this, StudentFormsActivity.class));
});
}
@Override
protected void onResume() {
super.onResume();
ListView studentsListView = findViewById(R.id.activity_students_list_view);
studentsListView.setAdapter(new ArrayAdapter<>((Context) this,
android.R.layout.simple_list_item_1,
alunoDAO.getAlunos()));
}
}
FormularioAlunoActivity
public class StudentFormsActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_student_forms);
final EditText nameField = findViewById(R.id.activity_student_forms_name);
final EditText phoneField = findViewById(R.id.activity_student_forms_phone);
final EditText emailField = findViewById(R.id.activity_student_forms_email);
Button saveButton = findViewById(R.id.activity_student_forms_save_button);
saveButton.setOnClickListener(view -> {
Aluno aluno = new Aluno(nameField.getText().toString(), phoneField.getText().toString(), emailField.getText().toString());
StudentsListActivity.alunoDAO.save(aluno);
finish();
});
}
}