Lidar com vários ouvintes de clique em um listView

Sendo um desenvolvedor Android, muitas vezes enfrentamos um problema comum de lidar com vários eventos na visualização de lista (de um adaptador de visualização de lista) e atualizar os elementos da IU que são definidos no arquivo Activity. Por exemplo, ao clicar na linha do item da lista, podemos precisar atualizar alguns elementos da IU que estão na atividade.

Freqüentemente, lidamos com esses eventos no adaptador criando um ouvinte de evento para as visualizações, mas se quisermos os elementos de UI de atualização que são definidos em Activity, então podemos precisar fazer isso usando interfaces – delegar design padrão ou outra solução é passar o id das visualizações que precisam ser atualizadas para o adaptador, mas essas podem não ser soluções elegantes.

Uma solução tão simples é,

define o ouvinte do clique na atividade e passa a atividade e define esse ouvinte do clique para as visualizações, então o evento de visualização é disparado, obtemos uma chamada para o onClick que é definido na Atividade.

O snippet de código para conseguir isso é:

O construtor do ListViewAdapter é

Public ListAdapter (ArrayList <String> people, OnClickListener clickListener)
{
this.list = people;
this.clickListener = clickListener;
}

Defina getView como abaixo,

@Override
public View getView (posição interna, visão da visão, pai do ViewGroup)
{
titular do ViewHolder;
convertView = view;
if (convertView == null)
{
holder = new ViewHolder ();
convertView = LayoutInflater.from (parent.getContext ()). inflate (R.layout.list_item, null);
holder.nameTextView = (TextView) convertView.findViewById (R.id.nameTextView);
holder.callButton = (Button) convertView.findViewById (R.id.callButton);
holder.msgButton = (Button) convertView.findViewById (R.id.msgButton);
convertView.setTag (titular);
} else
{
holder = (ViewHolder) convertView.getTag ();
}
holder.nameTextView.setText (list.get (position));

setClickListeners (holder.callButton);
setClickListeners (holder.msgButton);

setTagsToViews (holder.callButton, position);
setTagsToViews (holder.msgButton, posição);

return convertView;
}

/ **
* Define o onClickListener na visualização
*
* visualização @param
* /
private void setClickListeners (visualização da visualização)
{
view.setOnClickListener (clickListener);
}

Aqui, o layout listView contém os dois botões e uma etiqueta.

e na Activity implemente o setOnClickListener e minha função onClick é

@Override
public void onClick (Ver v) {

posição interna = (inteiro) v.getTag (R.id.key_position);
System.out.println (“Posição” + posição);

if (v.getId () == R.id.callButton) {
System.out.println (“Botão de chamada”);

} else if (v.getId () == R.id.msgButton) {
System.out.println (“Botão de mensagem”);

}
}

No trecho de código acima, lidei com eventos de clique de dois botões e também podemos atualizar quaisquer elementos da IU que são definidos na atividade dentro do método onClick. Em breve vou fazer upload de todo o código em git