Saltar para conteúdo


Foto
- - - - -

Fazer Refresh Listactivity


  • Por favor inicie sessão para responder
10 respostas a este tópico

#1 ljfc

ljfc

    Novato

  • Membros
  • Pip
  • 5 mensagens

Mensagem publicada 19 July 2012 - 14:51

Tenho uma listactivity e queria fazer refresh a ela mediante uma coordenada gps, isto é, ele vai buscar a coordenada envia para uma classe onde faço a query à bd, o problema é que ele faz a query inicial mas depois mesmo fazendo a função run() e tendo nessa função referência à função onde é feita a query ele não altera a lista.
esta é a minha classe main:
public class main extends ListActivity{
}
Qual a solução?
cumps,
Luís Cruz

#2 r3pek

r3pek

    Guru de Android

  • Former Staff
  • PipPipPipPipPip
  • 1560 mensagens
  • LocalizaçãoBA4 - Terceira - Açores
  • Nexus One + Motorola XOOM

Mensagem publicada 19 July 2012 - 14:59

Tens que fazer refresh ao Adapter: notifyDataSetChanged()

#3 ljfc

ljfc

    Novato

  • Membros
  • Pip
  • 5 mensagens

Mensagem publicada 19 July 2012 - 15:14

Mas onde faço esse refresh?

#4 ljfc

ljfc

    Novato

  • Membros
  • Pip
  • 5 mensagens

Mensagem publicada 19 July 2012 - 15:18

protected void onresume() {
//quando a Activity main receber o foco novamente abre-se novamente a conexão

lContaoDAO.open();
super.onresume();
autoUpdate = new Timer();
autoUpdate.schedule(new TimerTask() {
@Override
public void run() {
runOnUiThread(new Runnable() {
public void run() {
String Text2 = "Entrei no tempo: ";

Toast.makeText( getApplicationContext(),

Text2,

Toast.LENGTH_SHORT ).show();

areagps();
adapter.notifyDataSetChanged();
lContaoDAO.Consultar();
}
areagps() - faz cálculos de coordenadas
lContaoDAO.Consultar(); - faz o call para a classe onde está a query.
basta só meter adapter.notifyDataSetChanged();
na função run()???

cumps,
Luís Cruz

#5 Driver

Driver

    Membro

  • Membros
  • PipPip
  • 51 mensagens

Mensagem publicada 22 July 2012 - 17:57

Boas,
Antes de mais nada aconselho-te a utilizar um AsyncTask, uma vez que te torna o código mais "limpo" e utilizares o AlarmManager para agendares AutoUpdates. Para isso creio que deves tornar o areagps() num StartedService para poderes utilizar um Intent para dispoletares esse processo, desta forma as tuas Activities ficam com menos código de lógica aplicacional.
Para actualizares os dados pedidos ao Serviço, podes usar um BroadcastReceiver feito por ti. O Serviço após um cálculo de coordenadas, enviava um Broadcast ( LocalBroadcast de preferência ) para o Processo e no onReceive() recebes um Intent com o resultado em que podes actualizar os dados do adaptador e dispoletar a actualização da UI ( notifyDataSetChanged() ).

Cumps
Driver

#6 r3pek

r3pek

    Guru de Android

  • Former Staff
  • PipPipPipPipPip
  • 1560 mensagens
  • LocalizaçãoBA4 - Terceira - Açores
  • Nexus One + Motorola XOOM

Mensagem publicada 22 July 2012 - 20:56

Eish... não precisas dum serviço para isso :)
O serviço usa-se para fazer coisas quando a aplicação não está aberta. Se é só para fazer refresh quando a aplicação está aberta, o AsyncTask chega.

#7 Driver

Driver

    Membro

  • Membros
  • PipPip
  • 51 mensagens

Mensagem publicada 22 July 2012 - 22:13

Boas,
Epa, cálculo de coordenadas de GPS tipicamente é algo demoroso, um Serviço era mais adequado para isso. Até para poderes utilizar o PendingIntent() no AlarmManager para agendares AutoUpdate.

#8 r3pek

r3pek

    Guru de Android

  • Former Staff
  • PipPipPipPipPip
  • 1560 mensagens
  • LocalizaçãoBA4 - Terceira - Açores
  • Nexus One + Motorola XOOM

Mensagem publicada 22 July 2012 - 23:05

Boas,
Epa, cálculo de coordenadas de GPS tipicamente é algo demoroso, um Serviço era mais adequado para isso. Até para poderes utilizar o PendingIntent() no AlarmManager para agendares AutoUpdate.

Não... :) Como disse, um Serviço usa-se quando queres fazer algo sem ter a App aberta ou algo que não depende da interação do utilizador (actualizações de DB, monitorizar algo que não tem BoardcastIntent associado, etc). Criar um serviço para ir buscar coordenadas GPS é um autentico OverKill. Uma AsyncTask serve perfeitamente e faz o que se quer, já para não falar que na própria API de obtenção de coordenadas dum LocationProvider, podes especificar de quanto em quanto tempo queres updates, e esses updates são entregues via CallBack. Assim, um AsyncTask só seria necessário no caso de apenas pretendermos as coordenadas uma vez durante a executação da aplicação. Se for preciso mais que uma vez, é usado o callback e pronto.

#9 rafn

rafn

    Novato

  • Membros
  • Pip
  • 3 mensagens

Mensagem publicada 23 July 2012 - 12:15

Viva,
respondendo ao criador do topico, não basta apenas chamares o notifyDataSetChanged(), se o teu adapter for costumizavel por ti tens de fazer a devidas alterações para esse metodo ser chamado, se estiveres a usar um ArrayAdapter do android, basta apenas fazer esse notify, que a lista é actualizada.

#10 ljfc

ljfc

    Novato

  • Membros
  • Pip
  • 5 mensagens

Mensagem publicada 23 July 2012 - 14:11

o problema foi resolvido, obrigado!

#11 r3pek

r3pek

    Guru de Android

  • Former Staff
  • PipPipPipPipPip
  • 1560 mensagens
  • LocalizaçãoBA4 - Terceira - Açores
  • Nexus One + Motorola XOOM

Mensagem publicada 23 July 2012 - 14:50

Viva,
respondendo ao criador do topico, não basta apenas chamares o notifyDataSetChanged(), se o teu adapter for costumizavel por ti tens de fazer a devidas alterações para esse metodo ser chamado, se estiveres a usar um ArrayAdapter do android, basta apenas fazer esse notify, que a lista é actualizada.

Sim, com o Adapter para DBs SQLite também é "automática". Qualquer coisa custumizada, já tem que se proceder às devidas alterações... Eu só indiquei o caminho :)

o problema foi resolvido, obrigado!

Se poderes dizer como resolveste para poder servir como referencia para futuras dúvidas parecidas ou iguais a esta, agradecia.