Como faço para atualizar um listview?

4 respostas
Z

Olá galera,

Acabei de montar uma listview customizada, nela adicionei dois TextView e um Button.
Ao clicar nesse button o sistema está excluindo o registro do banco de dados normalmente. O único problema é que não está atualizando a listview com as novas informações.
Dei uma procurada no fórum e encontrei o seguinte post, nele vi que eu deveria utilizar o método notifyDataSetChanged para obter o resultado desejado.

Então fiz a seguinte codificação:

FinalizarPedido (Activity)
public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.finalizar_produto);

		if (getIntent().hasExtra("lista")) {
			lista = (ArrayList<PedidoProduto>) getIntent().getExtras().getSerializable("lista");
		}

		listView = (ListView) findViewById(R.id.list);
		ListaPedidoProduto lPedProd = new ListaPedidoProduto(getApplicationContext(), lista);
		
		View v = getLayoutInflater().inflate(R.layout.finaliza_pedido_footer, null);
		listView.addFooterView(v);
		listView.setAdapter(lPedProd);
	}
ListaPedidoProduto (Adapter)
public View getView(int position, View converView, ViewGroup oarent) {
		final PedidoProduto pedidoProduto = (PedidoProduto) getItem(position);
        View view = inflater.inflate(R.layout.listview_pedidoproduto, null);

        TextView txtNomeProduto = (TextView)view.findViewById(R.id.txtProduto);
        txtNomeProduto.setText(pedidoProduto.getNomeProduto());

        TextView txtValorProduto = (TextView)view.findViewById(R.id.txtValor);
        txtValorProduto.setText("Valor: " + String.valueOf(pedidoProduto.getValor()));
        
        Button btnExcluir = (Button) view.findViewById(R.id.btnExcluirPedidoProduto);
        
        btnExcluir.setOnClickListener(new View.OnClickListener() {
			public void onClick(View v) {
				PedidoProdutoDAO pedProdDAO = new PedidoProdutoDAO(context);
				pedProdDAO.excluir(pedidoProduto);
				notifyDataSetChanged();
			}
		});
        
        return view;
	}

Contudo não consegui obter o resultado desejado. A aplicação não retornou nenhum erro, mas também não atualizou a lista.
Alguém saberia me dizer o porque???

Agradeço desde já pela ajuda!

4 Respostas

V

você atualiza sua lista, consultando o banco e faz:

lPedProd = new ListaPedidoProduto(getApplicationContext(), lista);  
    listView.setAdapter(lPedProd);
viniciusalvess

tenta chamar o notifyDataSetChanged(); dentro do runOnUiThread();

Z

Galera, consegui fazendo da seguinte forma, dentro do Adapter no click do botão (Código acima), coloquei o método

Antes do notifyDataSetChanged() e deu certo. Tem algum problema fazer assim?

V

eu prefiro fazer novamente a consulta no banco e retornar os novos dados, mas como o banco é local, não vejo problema.

Criado 10 de novembro de 2012
Ultima resposta 12 de nov. de 2012
Respostas 4
Participantes 3