Tecnologia do Blogger.
RSS

Re: [androidbrasil-dev] Existe "refresh" em um ListView?

Quando você executar a ação que seleciona, guarde a posição do elemento da lista selecionado. Depois da atualização você manda selecionar ele de novo:

private void seiLa() {
...
int position = listView.getSelectedIntemPosition();
...
adapter.nofityDataSetChanged();
listView.setSelection(position);
}

acho que isso deve funcionar, não testei


On 24/08/2012, at 15:49, Felipe Aron <felipearon@gmail.com> wrote:

Galera ÚLTIMA coisa pra ficar o estado da arte, rs:

Ao selecionar um registro ele fica com uma cor em destaque. Ao clicar no botão Devolver/Vender ele agora faz a ação atualiza o adapter, o ponteiro continua no registro porém a cor de seleção some.

Como fazer para manter a cor de seleção no registro?

Estou enviando em anexo o print da tela com e sem a seleção pra ter ideia do problema.

Em 24 de agosto de 2012 15:19, Felipe Aron <felipearon@gmail.com> escreveu:
Galera, agora sim entendi a simplicidade da coisa.

No meu caso, tinha pego um ArrayAdapter já pronto no projeto - o que não me ajudou muito. Troquei para BaseAdapter, que é o que utilizo e fiz as devidas alterações conforme suas orientações, em especial o Neto e Otávio - valeu.

+1 que aprendi e vai pro pacote! rs

Em 24 de agosto de 2012 14:58, Otávio Mendes <otaviommendes@gmail.com> escreveu:

Adapter:
private List<Obj> list;

public Adapter() {
list = list();
}

public void setData(List<Obl> newList) {
this.list = newList;
}

Activity (onde você acrescenta o novo item):
private void onDataChanged() {
List<Obj> newList = getNewList();
adapter.setData(newList);
adapter.notifyDataSetChanged();
}

On 24/08/2012, at 14:55, Felipe Aron <felipearon@gmail.com> wrote:

Entendi.

Você ainda passou outra opção de criar um método no adapter setData() passando a lista como parâmetro. 

No caso esse método ao receber a lista o que devo fazer "dentro" do adapter? Preciso referenciar a lista? Como?

Desculpa perguntar tanto, mas estou um pouco confuso ainda - marinheiro de primeira viagem...rs.



Em 24 de agosto de 2012 14:44, Neto Marin <netomarin@gmail.com> escreveu:
Sim, o adapter sempre monta a lista baseado nos dados q ele tem. 
Tanto é q, vc disse q ele só "funciona" qnd vc recria o adapter, pois nesse momento passa o objeto atualizado pra ele.

[]s
---
Neto Marin

Blog: http://blog.netomarin.com
GTalk: netomarin@gmail.com
MSN: neto_marin@hotmail.com
Skype: netomarin


2012/8/24 Felipe Aron <felipearon@gmail.com>
Neto, não ficou muito claro essa questão.

Eu tenho uma classe Singleton que controla a lista de produtos vendidos/devolvidos. É a partir dela que eu faço a devolução de um item através de um método:

ItensDevolvidos.devolverItem(ItemDevolvido item);

Nesse método, caso já tenha devolvido tudo, é criado um novo item denominado "Item Anterior" identificado por uma propriedade no objeto.

Vi que no meu Adapter tem o método add(ItemDevolvido object) - no caso devo usar esse método para poder atualizar corretamente o adapter? 

Em 24 de agosto de 2012 14:12, Neto Marin <netomarin@gmail.com> escreveu:

Mas a chamada do add não é na lista, tem q ser no adapter.

Ou, eu costumo ter o ArrayList na minha classe, adiciono o item nesse ArrayList e no adapter eu crio um  método setData(ArrayList<type> dados), chamo esse método e depois chamo o notify...

[]s

---
Neto Marin

Blog: http://blog.netomarin.com
GTalk: netomarin@gmail.com
MSN: neto_marin@hotmail.com
Skype: netomarin


2012/8/24 Felipe Aron <felipearon@gmail.com>
Sim Ivan, incluo um novo objeto na lista - list.add( objeto )

Após isso se chamar o método adapter.notifyDataSetChanged() - não mostra o novo registro. Somente se eu recriar o adapter. :(

E agora não entendi, pela lógica a notificação era para enxergar esse novo registro correto? Ou não?

Em 24 de agosto de 2012 10:00, Ivan Java <x.surian.x@gmail.com> escreveu:

Você esta incluindo esse objeto na sua lista dentro do adapter, como no exemplo abaixo?

public void addItem(SuaClasse suaClasse) {
suaLista.add(suaClasse);
}

Em 24 de agosto de 2012 09:33, Felipe Aron <felipearon@gmail.com> escreveu:

Galera um novo último problema, hehe:

O método adapter.notifyDataSetChanged() atualiza corretamente o registro em questão.

Na tela de Itens tem o botão "Devolver", pode ao clicar decrementa a quantidade "vendida" até zero (0). Caso clique novamente em "devolver" já com a qtde. "vendida" = 0, é incluido um novo registro na lista do adapter.

Ao incluir esse novo registro e chamar o método notifyDataSetChange() ele não atualiza a lista para conter o novo registro. Somente se eu "recriar" o adapter ele irá mostrar.

E agora como resolver? To tentando aqui alternativas mas até agora sem sucesso.


Em 23 de agosto de 2012 14:25, Felipe Aron <felipearon@gmail.com> escreveu:
Muitíssimo obrigado galera! Funcionou direitinho! :)

Em 23 de agosto de 2012 14:04, Otávio Mendes <otaviommendes@gmail.com> escreveu:

Provavelmente você tem um List na sua classe Adapter que mantém os elementos que você monta o View que será exibido na lista.

Quando você decrementar esse valor, decremente também na lista e depois chame notifyDataSetChanged() do adapter.

Classe Adapter:
public void decrementa(int position) {
Object obj = lista.get(position);
obj.decrementa();
lista.set(position, obj);
}

Na Activity:
adapter.decrementa(position);
adapter.notifyDatasetChanged();


On 23/08/2012, at 13:58, Felipe Aron <felipearon@gmail.com> wrote:

Galera, numa ListView eu mostro produtos com a coluna quantidade. 

Ao clicar no registro, eu decremento essa quantidade e chamo novamente meu método listView.setAdaptater() porém nesse processo ela recarrega toda a lista e volta para o início (topo).

Existe uma forma de eu atualizar a ListView, sem precisar recarregar novamente pelo setAdapter(), e permanrcer no marcador selecionado?

--
Analista-Programador





--
Analista-Programador




--
Analista-Programador





--
Analista-Programador





--
Analista-Programador





--
Analista-Programador





--
Analista-Programador




--
Analista-Programador

<tela-01.png><tela-02.png>

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS

0 comentários:

Postar um comentário