I have two screens, one with a main list loaded with DB data and one data file, after inserting some data, the registration screen closes and returns to the main list, I am having trouble updating the ListView
screen main.
I made it work, but I'm not sure it's right.
EDIT : main activity change
My Activity from the list.
public class MainActivity extends AppCompatActivity {
private LivroCRUD livroCRUD;
private ListView lvPrincipal;
private LivroAdapter livroAdapter;
private List<Livro> lista;
private void getLivros() throws Exception {
//armazena os dados da busca em uma lista temporaria
List<Livro> tempLista = livroCRUD.buscarTodos();
// Cria a lista, caso ela não esteja criada
if (lista == null)
lista = new ArrayList<Livro>();
// Limpa a sua lista de livros e adiciona todos os registros da lista temporária
lista.clear();
lista.addAll(tempLista);
// Se o adapter for null, cria o adapter, se não notifica que seu dataset teve alteração
if(livroAdapter == null){
livroAdapter = new LivroAdapter(this, lista);
lvPrincipal.setAdapter(livroAdapter);
}else {
livroAdapter.notifyDataSetChanged();
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lvPrincipal = (ListView) findViewById(R.id.lvPrincial);
try {
this.getLivros();
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(this, "Não foi possivel carregar a lista.", Toast.LENGTH_SHORT).show();
}
}
@Override
protected void onResume() {
super.onResume();try {
this.getLivros();
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(this, "Não foi possivel carregar a lista.", Toast.LENGTH_SHORT).show();
}
}
The friend @Ramaral gave me the hint of using notifyDataSetChanged();
, creating a method on my adapter but I'm not getting it.
Adapter.
public class LivroAdapter extends BaseAdapter {
private Context context;
private List<Livro> lista;
public LivroAdapter(Context context, List<Livro> lista) {
this.context = context;
this.lista = lista;
}
@Override
public int getCount() {
return lista.size();
}
@Override
public Object getItem(int arg0) {
return lista.get(arg0);
}
@Override
public long getItemId(int arg0) {
return lista.get(arg0).getId();
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
Livro livro = lista.get(position);
final int auxPosition = position;
LayoutInflater inflater = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
final View layout = inflater.inflate(R.layout.item_lista, null);
TextView titulo = (TextView) layout.findViewById(R.id.tvTitulo);
titulo.setText(lista.get(position).getTitulo());
TextView autor = (TextView) layout.findViewById(R.id.tvAutor);
autor.setText(lista.get(position).getAutor());
TextView editora = (TextView) layout.findViewById(R.id.tvEditora);
editora.setText(lista.get(position).getEditora());
//BOTÃO ATUALIZAR
Button btnAtualizar = (Button) layout.findViewById(R.id.btnChamaAtualizar);
btnAtualizar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(context, AddUpdateActivity.class);
intent.putExtra("titulo", lista.get(auxPosition).getTitulo());
intent.putExtra("autor", lista.get(auxPosition).getAutor());
intent.putExtra("editora", lista.get(auxPosition).getEditora());
intent.putExtra("_id", lista.get(auxPosition).getId());
context.startActivity(intent);
}
});
//BOTAO DELETAR
Button btnDeletar = (Button) layout.findViewById(R.id.btnDeletar);
btnDeletar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
LivroCRUD livroCRUD = new LivroCRUD(context);
try {
livroCRUD.deletar(lista.get(auxPosition));
layout.setVisibility(View.GONE);
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(context, "Não foi possivel excluir!!!!!", Toast.LENGTH_SHORT).show();
}
}
});
return layout;
}
//METODO PARA ATUALIZAR LISTA APÓS ALTERAÇÕES
public void atualizaLista(List<Livro> lista){
this.lista = lista;
notifyDataSetChanged();
}
}
I can not call the atualizaLista
method on my onResume
.