1
I have two screens, one with a main list loaded with BD data and one of registration, after inserting some data, the registration screen closes and goes back to the main list, I’m having trouble updating the ListView
of the main screen.
I did it that works, but I’m not sure if it’s right.
EDIT: change of main Activity
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();
}
}
Friend @Ramaral gave me the tip to use the notifyDataSetChanged();
, creating a way into 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’t call the method atualizaLista
in my onResume
.
Apparently right, the function is public, you import your extension of the Adapter Livroadapter, bookAdapter.updateList( list ); onResume doesn’t work? What problem are you having exactly?
– Matheus de Mello
Call it that way fires a Nullpointerexception.
– Vinicius
Looking at this edited code, you haven’t started your CRUD book anywhere in Mainactivity, so it has null value when you try to call the search( );
– Matheus de Mello
it is true @Matheusdemello had let go, now this working.
– Vinicius