Eu estou olhando para atualizar um ListView
sem recarregar a página. Mais precisamente, eu tenho um serviço que está enviando dados para um ListView
em um Activity
, No entanto, o Activity
carrega muito antes do Service
pode obter os dados. Então eu preciso ser capaz de carregar / recarregar o ListView
depois de Activity
já carregou.
Respostas:
1 para resposta № 1eu achei aquilo notifyDataSetChanged
só funciona se você usar o add
, insert
, remove
e clear
funções no Adapter
, então acabei fazendo da seguinte forma em uma implementação semelhante:
A AsyncTask
obtém todos os dados em doInBackground
. Então, quando terminar, defino o adaptador de lista pela primeira vez em onPostExecute
. Para que o usuário saiba que algo está carregando, eu coloquei um TextView
no topo de Listview
e defina seu texto para "Carregando .." em onPreExecute
e depois torná-lo invisível em onPostExecute
quando os dados estão prontos.
Se você precisar atualizar os dados, basta executar o AsyncTask
novamente.
Eu gosto desse jeito porque você está apenas definindo o ArrayAdapter
uma vez (ou seja, quando você finalmente tiver todos os dados). Aqui é mais no AsyncTask no caso de você precisar dele. Os documentos têm algum código de exemplo legal.
1 para resposta № 2
Ligar notifyDataSetChanged()
no ListView
"s Adapter
sempre que você quiser atualizá-lo.
1 para resposta № 3
Eu diria para usar IntentService
ao invés de Service
. Por usando IntentService
você será capaz de enviar dados para o fundo Service
e também receber os dados atualizados ao disparar um BroadCastReceiver
para atualizar sua interface do usuário. Aqui é um exemplo completo de como você pode realizar sua tarefa usando um IntentService
.